ld 无法找到 libjasper 库
我正在尝试将应用程序与Ubuntu上的GC联系起来18.04. LD找不到Libjasper库.我用这些命令手动安装了它: sudo apt update sudo apt install libjasper1 libjasper-dev 但是有一个错误: /usr/bin/ld: cannot find -llibjasper 我尝试了此命令添加库但没有起作用: gcc -o cnn connected_layer.c connected_layer.h convolutional_layer.c convolutional_layer.h image.c image.h maxpool_layer.c maxpool_layer.h network.c network.h tests.c -Wall `pkg-config --cflags --libs opencv` -flto -ffast-math -L /usr/lib/x86_64-linux
8 2024-04-10
编程技术问答社区
对主ld的未定义引用
我正在尝试链接到文件 - 一个包含主函数的C文件和一个仅跳到主的ASM文件. 我已经安装了mingw. 我的文件: //kernel.c void some_function(){ } void main(){ char* video_memory = (char*) 0xb8000; *video_memory = 'X'; some_function(); } ;kernel_entry.asm [bits 32] [extern main] call main jmp $ 我称构建的命令: gcc -ffreestanding -c kernel.c -o kernel.o nasm kernel_entry.asm -f elf -o kernel_entry.o ld -o kernel.bin -Ttext 0x1000 kernel_entry.o kernel.o 我遇到的错误: kernel_entry.o:(.text+0x1): u
30 2024-04-09
编程技术问答社区
了解nostdlib C程序的ELF二进制大小
我在Ubuntu 20.04,gcc 9.3.0,ld 2.34. 我有一个简单的Hello World程序,该程序不使用glibc或任何其他库,只使用Write syscall.尽管如此,我的二进制尺寸大约是8kb.我不确定为什么这么大,而不是说1kb. c程序: int x64_syscall_write(int fd, char const *data, unsigned long int data_size) { int result = 0; __asm__ __volatile__("syscall" : "=a" (result) : "a" (1), "D" (fd), "S" (data), "d" (data_size) : "r11", "rcx", "memory"); return result; } __asm__(".
10 2024-04-09
编程技术问答社区
静态编译libc C代码和ASM代码
我有ASM代码: extern my_func extern printf extern exit global _start section .data ... section .text _start: ... call printf ... call my_func ... call exit 和C代码: int my_func(int a, int b) { return a+b; } 我正在使用64位机器上的Fedora.我希望可执行文件是32位. 对于动态链接,我做: nasm -f elf32 asm.asm ; this gives me asm.o gcc -m32 -Wall -c c_code.c ; this gives me c_code.o ld c_code.o asm.o -melf_i386 -L
8 2024-04-09
编程技术问答社区
ld -export-dynamic只针对一个库?
可以将--export-dynamic传递到ld,这将导出程序中的符号(以便它们可用于运行时加载的任何共享库): $ cat > test.c void foo() {} int main() { foo(); } ^D $ gcc test.c $ nm -D a.out | grep foo ...什么都没有.现在: $ gcc -Wl,--export-dynamic test.c $ nm -D a.out | grep foo 0000000000001129 T foo ...工作. 这是在 httpps://sourceware.org/binutils中记录的/Docs-2.34/ld/options.html#options 是否只能从一个特定的静态库中导出符号? 给定: $ gcc myprogram.cc lib1.a lib2.a lib3.a 说我只想从lib2.a中导出程序中的符号,而不是lib1.a或li
8 2024-04-09
编程技术问答社区
LD_PRELOAD和联结
我有这个小的测试代码atfork_demo.c: #include #include void hello_from_fork_prepare() { printf("Hello from atfork prepare.\n"); fflush(stdout); } void register_hello_from_fork_prepare() { pthread_atfork(&hello_from_fork_prepare, 0, 0); } 现在,我以两种不同的方式进行编译: gcc -shared -fPIC atfork_demo.c -o atfork_demo1.so gcc -shared -fPIC atfork_demo.c -o atfork_demo2.so -lpthread 我的演示主atfork_demo_main.c是: #include
24 2024-04-09
编程技术问答社区
ld抱怨说:在函数"_start "中,对"__libc_csu_fini "和"__libc_csu_init "有未定义的引用。
我使用Clang而不是GCC编辑了GTK+程序.到目前为止还不错,除了我无法正确拥有 ld 链接. 原始的makefile称为GCC进行链接,这样的链接: gcc -g -o2 -eexport -dynamic -o my_application somefile.o shose.o -pthread -lgnOmeUI -2 -lsm -lice -lice -lbonoBoui -2 -lngnomeVfs -lgnomevfs -lgnomevfs -lngnomecanvas-lgnomecanvas-lgnomecanvas-2-lgnomecanvas-2 lbonobo-2 -lbonobo-activation -lorbit-2 -lart_lgpl_2 -lgconf-2 -lglade-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-latk-1.0 -lgio-lgio-2.0 -lgio-2.0 -lpangoft2-1
32 2024-04-09
编程技术问答社区
在Windows上使用MinGW的GMP
我设法在Windows 7(64位计算机)上成功构建了GMP库.我遵循的步骤是: ./configure --enable_cxx --disable-static --enable-shared --prefix="/c/MinGW" make make install make check 所有测试成功通过.显然,我正在可以编译和运行GMP程序.但是,当我尝试编译以下程序时: #include #include #include #include char *progname; void print_usage_and_exit () { fprintf (stderr, "usage: %s -q nnn\n", progname); fprintf (stderr, "usage: %s nnn ...\n", progname); exit (-1); }
22 2024-04-09
编程技术问答社区
从C中获取*ABS*符号的值
从c? 中访问*ABS*(绝对,不偏置)符号的实际值的正确方法是什么 我正在使用LD将数据(... A HTML模板)嵌入可执行文件(...遵循 https://csl.name/post/embedding-binary-data/).如: ld -r -b binary [the_file_to_be_embedded] -o [some_object.o] 然后,我正在使用 const char _some_object_start; const char _some_object_end; const int _some_object_size; 在实际代码中.实际的链接文本可以通过&_some_object_start获得字符指针来很好地效果;不过,读取尺寸的尺寸一直以平台依赖的方式破裂:在ARM64,(long) &_some_object_size上实际上是尺寸,但是在X64上,编译器试图使其与PC相关,但最终并不是正确的东西. 供参考,这是
12 2024-04-09
编程技术问答社区
链接器脚本。把一个特定的文件放在后面的位置
我想编写一个链接脚本,看起来像这样: SECTIONS { . = 0x0; .startup . : { startup.o(.text) } .text : { *(.text) } .data : { *(.data) } .bss : { *(.bss COMMON) } . = 0x4000; other.text : { other.o(.text) } other.data : { other.o(.data) } other.bss : { other.o(.bss) } } 我的意图是按以下顺序: 一个带有startup.o startup.o 的部分 .text,.data和.bss包含所有其他输入文件的这些部分 other.o other.o .text,.data和.bss other.o 的部分 当然,我给出的脚本有一个问题:other.o以前使用的*通配符中包含,因此不会放入输出部分other.
10 2024-04-09
编程技术问答社区
对 "memcpy "的未定义引用;ld引起的错误
我正在开发一个嵌入式项目. mipsel-linux-gnu-ld: main.o: in function 'fooBar':main.c:(.text+0x3ec): undefined reference to 'memcpy' 此错误是由类似于此操作的每个操作引起的,在该操作中,我将指针的值分配给了非销钉类型变量. int a = 0; int *ap = &a; int c = *ap; //this causes the error 这是另一个示例: state_t *exceptionState = (unsigned int) 0x0FFFF000; currentProcess->cpu_state = *exceptionState; //this causes the error 我已经在makefile中包含了标志-nostdlib 预先感谢您! 解决方案 I have already included the flag -no
12 2024-04-09
编程技术问答社区
/usr/bin/x86_64-linux-gnu-ld: 找不到?
i在Ubuntu 18.04(GCC 7.3)中学习C语言 输入make all命令时,此错误出现: /usr/bin/x86_64-linux-gnu-ld:找不到-lkeccak Makefile如下. CC=gcc CFLAGS=-03 -fomit-frame-pointer -msse2avx -mavx2 -march=native -std=c99 all: $(CC) $(CFLAGS) -c Lizard.c main.c randombytes.c sha512.c $(CC) $(CFLAGS) -o Lizard Lizard.o main.o randobytes.o sha512.o -lkeccak run: all ./Lizard new: make clean make all ./Lizard 当前libkeccak.a文件与Makefile的目录中 它也位于/usr/
18 2024-04-09
编程技术问答社区
交叉编译为什么ld找不到共享库/如何进一步调试?
我试图在ubuntu上交叉编译并链接我的手臂路由器,我会收到以下错误.过去,我认为我能够通过设置适当的环境变量来解决此问题,但是这次不起作用.谁能帮我弄清楚为什么这可能行不通: /home/ubuntu/Downloads/toolchain-arm_cortex-a9_gcc-4.9-linaro_musl-1.1.2_eabi/bin/../lib64/gcc/arm-openwrt-linux-muslgnueabi/4.9.1/../../../../arm-openwrt-linux-muslgnueabi/bin/ld: cannot find -lpopt 但是,libpopt.SO存在于: lrwxrwxrwx 1 root root 34 Sep 10 12:46 /lib/x86_64-linux-gnu/libpopt.so -> /lib/x86_64-linux-gnu/libpopt.so.0 我根据绝望的顺序设置以下环境变量.
20 2024-04-09
编程技术问答社区
为什么我的main.c没有使用pthreads,却要在我的main.c编译中明确链接到pthreads?
在Linux中,我有一个共享库,我使用了Pthreads和一个不使用的Main.C. libpthread.so出现在我的共享库的LDD中,这是正确的. $ ldd libmapreduce.so.1.0 linux-gate.so.1 => (0x0067d000) libpthread.so.0 => /lib/libpthread.so.0 (0x0058c000) [...] 但是,当我编译并链接我的main.c时,它不使用pthreads到我的共享库时,我会看到: $ icc -Wall -o main main.c -lmapreduce /opt/intel/Compiler/11.1/046/lib/ia32/libiomp5.so: undefined reference to `pthread_atfork' 将-lpthread添加到我的compile命令,即 $ icc -Wall -o main
14 2024-04-09
编程技术问答社区
为什么ld不能从/etc/ld.so.conf中的路径找到库?
我想将/opt/vertica/lib64添加到系统库路径中,所以我执行以下步骤: (1)将/opt/vertica/lib64添加到/etc/ld.so.conf中,然后运行ldconfig, (2)检查: bash# ldconfig -p | grep vertica libverticaodbc.so (libc6,x86-64) => /opt/vertica/lib64/libverticaodbc.so ...... 但是当我运行" ld -lverticaodbc --verbose"命令时: ================================================== attempt to open /usr/x86_64-redhat-linux/lib64/libverticaodbc.so failed attempt to open /usr/x86_64-redhat-linux/lib64/lib
24 2024-04-09
编程技术问答社区
克隆系统调用OS X不链接-未定义的符号
我想在OS X上使用clone系统调用.这是一个Unix系统调用,所以应该不是问题,对吗?我已经成功尝试使用fork,vfork和其他类似功能.这是我尝试的程序: #include //Clone resides here #include //standard library #include #include #include #include #include #include #include #include int helloWorld(); int main(int argc, char *argv[]) { int (*functionPointer)() = &helloWorld; //The first argument of c
16 2024-04-09
编程技术问答社区
C/C++未使用的内联函数未定义引用
考虑以下代码(这不是特定于Pthread;其他示例,例如涉及实时库的示例,表现出相似的行为): #define _GNU_SOURCE #include inline void foo() { static cpu_set_t cpuset; pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset); } int main(int argc, char *argv[]) { } 这是C和C ++中的有效程序.因此,我将其内容保存到testc.c和testcpp.cpp>中,然后尝试构建. 当我构建C++时,我没有错误.当我在C中构建时,会收到一个未定义的参考错误.现在,此错误发生在-O1和-O3中.无论如何,是否可以指示GCC做正确的事情(请参阅foo未使用并跳过对pthread_setaffinity_np的定义的要求)? 编辑:我认为从上下文中
8 2024-04-09
编程技术问答社区
如何在内存中以不同的地址加载一个程序?
通常,用户程序二进制文件将在程序地址空间中加载在低地址(通常0x400000附近),该空间将在elf binary中指定(对于Linux). 我们可以强迫用户二进制在高地址加载,可能在libc或其他此类库中加载的地址范围内? 我尝试在网上找到解决方案,但找不到任何具体解决方案. (我正在使用Ubuntu 12.10 64bit OS) 谢谢 解决方案 除非二进制是与位置无关的(PIE),否则这是不可能的.在链接时,对特定的负载地址进行了正常(非PIE)二进制文件,在链接期间,搬迁到其他地址所需的信息已经丢失. 编辑:以上假设您正在使用现有的二进制文件.如果您自己生产二进制文件,则可以使用以下链接选项控制硬编码的加载地址: -Wl,-Ttext-segment,0x80000000 由您所需的地址替换0x80000000.某些地址(例如用于内核使用的地址,通常从0xc0000000开始),并且必须对该地址进行页面分配(最后3个十六进制数字必须
6 2024-04-09
编程技术问答社区
在MinGW中手动链接标准库
我很难让mingw识别CSFML的库.我必须使用链接器手动链接每个库.现在,我没有从简单的GCC调用自动链接的标准库. bbroo@DESKTOP-1F1J3SM ~/Shaders $ ld shaders.o libcsfml-system.a libcsfml-window.a libcsfml-graphics.a csfml-system-2.dll csfml-window-2.dll csfml-graphics-2.dll shaders.o:shaders.c:(.text+0x10): undefined reference to `__main' shaders.o:shaders.c:(.text+0x4bc): undefined reference to `sleep' mingw中标准库的名称是什么?我如何在LD中链接到它? 我知道这没有回答这个问题,而是对此作品进行编译: gcc shaders.c libcsfml-system.a
8 2024-04-09
编程技术问答社区
错误的原因和解决方案 -"/usr/bin/ld: 无法找到 -levent"?
在编译使用Libevent库的程序时,我正在使用GCC选项-Levent.但是我遇到了这个错误 - /usr/bin/ld:找不到-levent 我的系统上没有libevent,所以我在使用 编译时静态地链接到它 gcc -o Hello -static -I libevent-1.4.12-stable/ hello.c -levent 如何解决这个问题? 预先感谢! 解决方案 系统上的libevent.(a|so)文件在哪里? 如果不在系统的库路径上,则必须添加一个-L选项,将其位置添加到链接器搜索的路径列表中. ,例如 gcc -L/folder/containing/event/lib -levent mysource.cc 其他解决方案 您需要在系统上具有libevent,或者需要明确指定其路径(如果您使用标头的第三方库). 我怀疑它不在您的默认路径中.
16 2024-04-09
编程技术问答社区