Tag: 链接器

ns_initparse的链接器错误

这里的代码 #include #include #include #include #include int main (int argc, char *argv[]) { u_char nsbuf[4096]; char dispbuf[4096]; ns_msg msg; ns_rr rr; int i, j, l; if (argc < 2) { printf ("Usage: %s […]\n”, argv[0]); exit (1); } for (i = 1; i < argc; i++) { l = res_query (argv[i], ns_c_any, ns_t_mx, nsbuf, sizeof […]

链接步骤找不到符号(XC8编译器)

我正在尝试使用XC8编译器编译和链接C程序。 我改变了C18编译器并对代码进行了一些小的兼容性更改。 使用C18,编译和链接的代码就好了。 使用XC8,编译很顺利,但链接步骤失败并出现此错误: Error [500] ; 0. undefined symbols: _putch(server.obj) _ENC_Init(server.obj) _ENC_WriteRegister(server.obj) _ENC_ReadRegister(server.obj) 由于编译成功,我猜有原型,ergo .h文件包含好。 我猜编译器找不到.c文件。 函数putch 不是在我自己的程序中调用的,但它在putchar调用,我使用该函数。 以ENC_开头的函数是我自己的函数。 我在XC8工具套件的“包含搜索路径”中添加了两条路径: C:\Program Files (x86)\Microchip\xc8\v1.12\sources ,编译器的.c文件所在的位置,我相信 C:\…\lib ,我自己的.c文件所在的位置。 但是,我仍然得到错误。 我该如何解决这个问题? 这是完整的日志: Advisory[1233] Employing 18F4620 errata work-arounds: Advisory[1234] * Corrupted fast interrupt shadow registers Advisory[1234] * Data in RAM location can be corrupted if async. reset occurs […]

用windows链接linux静态库和cygwin

我有一个二进制静态库libfoo.a编译为32位Linux机器。 我希望在我用cygwin编译的win32项目中编译它。 那可能吗? 这似乎是可能的,因为存档中的所有目标文件都应该是标准的ELF格式。 但是我一直在收到有关nm在libfoo.a找到的函数的链接错误。 当我创建一个存根libfoo.a ,其中包含一些与libfoo.a相同名称的空函数时,我没有收到有关这些函数的链接错误。 这是可能的还是我错过了什么? 无论如何,我该如何解决这个问题?

链接LAPACK / BLAS库

背景: 我正在研究一个用C和Fortran 77混合编写的项目,现在需要将LAPACK / BLAS库链接到项目(所有这些都在Linux环境中)。 有问题的LAPACK是netlib.org的3.2.1版(包括BLAS)。 使用顶级Makefile编译库(make lapacklib和make blaslib)。 问题: 在链接期间,错误消息声称从LAPACK例程调用的某些(并非所有)BLAS例程未定义。 这给了我一些头疼,但是当(在Makefile中)要链接的库的外观顺序发生变化时,问题最终得以解决。 码: 在下文中,(a)给出错误,而(b)没有。 链接由(c)执行。 (a)LIBS = $(LAPACK)/blas_LINUX.a $(LAPACK)/lapack_LINUX.a (b)LIBS = $(LAPACK)/lapack_LINUX.a $(LAPACK)/blas_LINUX.a (c)gcc -Wall -O -o $ @ project.o project.a $(LIBS) 题: 可能是仅仅是某些例程的未定义引用的原因以及使外观顺序相关的原因是什么?

链接器错误 – 尝试链接arm,但链接器使用x86

我试图将这个C库交叉编译为iOS库,即用于armv7机器。 我正在使用OSX机器来编译库。 该项目设置为使用Autoconf – 这是我正在使用的选项: ./configure –host=arm-apple-darwin –prefix ~/dev/xmlrpc-c-1.25.28/iOS_bin_arm CFLAGS=”-arch armv7s -isysroot /Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk -miphoneos-version-min=4.0″ –disable-curl-client –disable-cplusplus LDFLAGS=’-arch armv7s -miphoneos-version-min=4.0 –sysroot /Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk’ 编译好了。 问题发生在链接阶段: ld: warning: ignoring file parse_datetime.osh, file was built for armv7s which is not the architecture being linked (x86_64): parse_datetime.osh ld: warning: ignoring file parse_value.osh, file was built for armv7s which is not […]

为什么找不到库,即使它们显然位于-L路径上?

我有以下链接命令(抱歉它的长度,但我试图尽可能保留原始,除了缩短一些路径): CC CMakeFiles / main.dir / main.cpp.o -o main -L / me / libs / cgal / lib -L ​​/ me / libs / tbb / tbb-2017_U7 / build / linux_intel64_gcc_cc5.3.0_libc2.19_kernel3.12.61_release -rdynamic -lmpfr -lgmp /me/libs/cgal/lib/libCGAL_ImageIO.a /me/libs/cgal/lib/libCGAL.a -lboost_thread -lboost_system -lz /me/libs/cgal/lib/libCGAL_ImageIO.a / me / libs /cgal/lib/libCGAL.a -lboost_thread -lboost_system -lz -ltbb -ltbbmalloc -Wl,-rpath,/ me / libs / […]

gcc链接订单问题

我目前在使用以下行编译时遇到问题: gcc test.c -I/usr/include -L/lib -lipc -lpcd -lrt -o /home/examples/bin/test 我被建议使用start-group和end-group对它们进行分组。 我无法获得正确的语法。 我想我需要这个部分,但整条线是什么样的? -Wl,–start-group -lipc -lpcd -lrt -Wl,–end-group

加载同一共享库的两个不同版本

我的情况与以下情况非常相似。 有libA.so ,根据一些编译时标志显示略有不同的行为(它是一个外部的lib,我不能修改源)。 然后,我有libB.so依赖于libA.so (用-DVALUE=1编译),在我的可执行文件中我依赖于libB.so ,以及libA.so ,但是使用-DVALUE=0编译。 但是,一旦我启动它,ld解析所有符号与libA.so版本之一,所以我的可执行文件和libB.so都使用相同的function。 有没有办法指定我只想使用其依赖项加载解析libB.so未定义符号? 我在构建libB.so时尝试使用-Wl,-Bgroup标志,但它没有改变任何东西。 我知道dlmopen可以在新的命名空间中加载库,但我想在启动时自动加载它。 我附加了一组重现行为的文件: libA.so: #include #define _STR(x) #x #define STR(x) _STR(x) #ifndef VALUE #define VALUE default #endif void func2() { printf(STR(VALUE) “\n”); } void func() { func2(); } libB.so: #include extern void func(void); void b_func() { func(); } 可执行文件: #include extern void b_func(void); extern void func(void); […]

将结构放入闪存(微控制器)的最常用方法是什么?

我正在使用GCC for ARM V-4.8.3工具链进行嵌入式C项目。 我有一系列查找结构,只在整个程序的生命周期中读取。 由于我的RAM耗尽(并且有大量的Flash未使用),最好将它们推入闪存,这不会影响程序的function。 问题是如何。 一种方法是使用GCC提供的variable __attribute__ ((section (“TEXT”))) 。 在这种情况下,我的代码依赖于编译器。 例如,如果我想使用Microchip编译器使用我的代码,我需要编辑代码以移植到新环境。 我想到的另一种方法是使用链接器脚本。 该结构仅在代码中声明。 在我看来,第二种方法更便携。 虽然仍然需要调整链接器脚本,但对我来说它更好。 是否有更通用的方法可以使代码更容易进入将变量放入闪存的上下文中? 将它们定为常数,意味着它们将被置于rodata部分。 不要进入他们“属于”的文本部分。

gcc:允许未定义的符号

我不希望gcc链接器将未定义的符号显示为链接错误。 我在MAC OSX 10.6上使用gcc 4.2 当然我在线寻找解决方案,但所有的尝试都失败了! 如何修改此命令以摆脱未定义的符号错误? gcc -o Proj $(wildcard *.o); 谢谢。 编辑:我正在研究一个研究项目,我需要代码可以链接,我不在乎它是否会有运行时exception