Tag: linker

为什么总是说“未定义参考”?

(我在Windows上。) 我正在使用C程序测试我编译的DLL( libsox ),它看起来像这样: #include #include “sox.h” int main(void) { char const * versionText = sox_version(); printf(versionText); return 0; } DLL中定义的函数在sox.h有以下原型(其中包含cdecl ): LSX_RETURN_VALID_Z LSX_RETURN_PURE char const * LSX_API sox_version(void); 这是问题所在:当我尝试使用gcc -lsox -o test.exe test.c构建文件时,出现以下错误: C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\ccSS2h2z.o:test.c:(.text+0xf): undefined reference to `sox_version’ collect2: ld returned 1 exit status 一句话给-lsox :我在MinGW的lib文件夹中有库文件“libsox.dll.a”。 如果我写-lsoxnonsense ,那么它说没有库。 这意味着在所示的情况下,它找到了库。 那么为什么不想创建链接呢?

交叉编译为什么不能找到共享库/如何进一步调试?

我试图在ubuntu上为我的arm-router交叉编译和链接聚合,我得到以下错误。 在过去,我认为我已经能够通过设置适当的环境变量来解决这个问题,但这次没有用。 任何人都可以帮我弄清楚为什么这可能不起作用: /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 lrwxrwxrwx 1 root root 34 Sep 10 12:46 /lib/x86_64-linux-gnu/libpopt.so -> /lib/x86_64-linux-gnu/libpopt.so.0 我按照绝望的顺序设置以下环境变量无济于事。 LIBRARY_PATH=/lib/x86_64-linux-gnu/ LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/ PATH=/lib/x86_64-linux-gnu/:/usr/include/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 认为它可能是因为它可能是目标架构问题(也许我需要为交叉编译的目标构建libpopt.so)而导致我将libpopt.so从路由器复制到我的ubuntu并再次设置路径。 再无济于事。 我可能做错了什么? 谢谢

如何将-libm传递给MPICC? libimf.so:警告:feupdateenv未实现且始终失败

我是一个新手试图通过mpicc用gcc替换icc来编译程序。 我已经发现 ,我需要使用以下命令进行编译 $ OMPI_CC=gcc make 但是,我收到以下错误消息( 众所周知 ) /opt/intel/fce/9.1.036/lib/libimf.so: warning: warning: feupdateenv is not implemented and will always fail 我试着这样做 $ make clean && OMPI_CC=gcc OMPI_LDFLAGS=-libm make 然后我明白了 /usr/bin/ld: cannot find -libm collect2: ld returned 1 exit status 但是,我在那里找到了文件 lrwxrwxrwx /usr/lib/libm.so -> /lib/libm.so.6 lrwxrwxrwx /lib/libm.so.6 -> libm-2.3.6.so -rw-r–r– /lib/libm-2.3.6.so

在Mac OS X上使用libpng编译C程序

我在C中写了一个使用libpng的小实用程序。 在linux下,我只需安装libpng-dev并执行“gcc myapp.c /usr/lib/libpng.so -o myapp”。 在Mac OS X中,我安装了Xcode工具,我相信它包含了libpng。 我链接了什么,是否需要为png.h指定包含路径?

gcc的“-Wl,option”和“-Xlinker option”语法之间的任何区别

我一直在查看一些配置文件,我已经看到两者都被使用(虽然在不同的架构上)。 如果你在linux盒子上使用gcc,那么将选项传递给链接器的两种语法之间有什么区别吗? 阅读gcc手册,就我所知,它们几乎完全相同。

在Objective-C代码中使用extern“C”的链接器错误

我正在尝试创建一些可以从iPhone应用程序中的Objective-C和C ++代码调用的实用程序函数。 我有第三方C ++类,无法编译为ObjectiveC ++(。mm)。 我有一个头文件声明我的函数,然后是一个定义它们的.c文件。 我已检查拼写错误三倍,但由于某种原因,我的链接器无法找到任何函数的定义。 这是C辅助函数的标题: #ifndef FILE_LOADER_H #define FILE_LOADER_H #if __cplusplus extern “C” { #endif void * loadDataFromFile(const char * szFilename, bool bDocument); void * loadImageFromFile(const char * szFilename, bool bDocument); void loadMeshFromFile(const char *szFilename, void* pMesh); #if __cplusplus } // Extern C #endif #endif 这是.c文件: #include “FileLoader.h” #include #include #include void […]

R包链接到外部C库

我有一些利用igraph库的c代码。 我想在它周围放一个R包装并将其作为R包发送给CRAN。 igraph已经在CRAN上有一个R端口,所以我的R包’foo’依赖于R的igraph是有意义的。 由于foo使用自己的C代码依赖于C igraph,我如何将我的C函数链接到原始的igraph库? 我已经读过这是在一个名为Makevars的文件中完成的,但链接到外部库非常多毛。 如果这是不可能的,那么复制整个igraph源代码并将整个内容放入我的/ src目录是否更好? R igraph包已经有一个名为Makevars的文件,但我不明白如何构建所有的c文件 – 通常在我的Makefile中我有类似gcc(一些.c源文件列表)-o,但Makevar只包含 PKG_CFLAGS=-DUSING_R -I. -Ics -Iglpk -Iglpk/amd -Iglpk/colamd \ -g -O2 -I/usr/include/libxml2 -g -O2 -I/usr/include/libxml2 -DNDEBUG \ -DPACKAGE_VERSION=\”0.6\” -DINTERNAL_ARPACK \ -DIGRAPH_THREAD_LOCAL=/**/ PKG_CXXFLAGS= -DUSING_R -DIGRAPH_THREAD_LOCAL=/**/ -DNDEBUG PKG_LIBS=-lxml2 -lz -lpthread -licucore -lm -lgmp $(FLIBS) $(LAPACK_LIBS) $(BLAS_LIBS) all: $(SHLIB) 并且没有其他Makefile。 总之,我如何将C代码放入依赖于另一个C库的R包中,如何编写相应的Makevars(或Makefile)来合并C函数? 这里发布了一个较旧的问题,但似乎只是链接到帮助编写自己的C代码,而不依赖于任何东西。

符号etext,edata和end定义在哪里?

这是来自Linux手册页的代码: #include #include extern char etext, edata, end; int main() { printf(“First address past:\n”); printf(” program text (etext) %10p\n”, &etext); printf(” initialized data (edata) %10p\n”, &edata); printf(” uninitialized data (end) %10p\n”, &end); exit(EXIT_SUCCESS); } 运行时,下面的程序产生如下输出: $ ./a.out First address past: program text (etext) 0x8048568 initialized data (edata) 0x804a01c uninitialized data (end) 0x804a024 etext , edata […]

Eclipse C / C ++(CDT)add -l选项(链接数学模块)gcc -lm

我试图让Linux上的eclipse(Ubuntu)链接数学模块。 通常我会链接gcc -lm。 如何让eclipse添加这个? 它是在Project-> Properties下的库路径中吗? 数学模块在Linux Ubuntu系统上的位置是什么?

直接将C程序与ld链接失败,未定义引用`__libc_csu_fini`

我正在尝试在Linux下编译一个C程序。 然而,出于好奇,我正在尝试手动执行一些步骤:我使用: gcc前端生成汇编代码 然后运行GNU汇编程序以获取目标文件 然后将其与C运行时链接以获取可用的可执行文件。 现在我被连接部分困住了。 该程序是一个非常基本的“Hello world”: #include int main() { printf(“Hello\n”); return 0; } 我使用以下命令来生成汇编代码: gcc hello.c -S -masm=intel 我告诉gcc在编译后退出并使用Intel语法转储汇编代码。 然后我使用GNU汇编程序来生成目标文件: as -o hello.o hello.s 然后我尝试使用ld生成最终的可执行文件: ld hello.o /usr/lib/libc.so /usr/lib/crt1.o -o hello 但我不断收到以下错误消息: /usr/lib/crt1.o: In function `_start’: (.text+0xc): undefined reference to `__libc_csu_fini’ /usr/lib/crt1.o: In function `_start’: (.text+0x11): undefined reference to `__libc_csu_init’ 符号__libc_csu_fini/init似乎是glibc的一部分,但我无法在任何地方找到它们! 我尝试使用相同的结果静态链接libc(针对/usr/lib/libc.a […]