Tag: ar

对我自己的库的未定义引用

我用几个创建了我的lib.a文件 gcc -c file.c -o file.o 然后 ar sr lib/libtest.a file1.o file2.o file3.o 确认 ar -t lib/libtest.a file1.o file2.o file3.o 但是当我尝试编译测试应用程序时 gcc lib/libtest.a test.c -o test 我在函数main得到了未定义的引用:来自file1.o,file2.o,file3.o的函数

gcc在静态库中链接未解析符号的顺序是什么

当调试函数符号冲突问题时,我发现gcc的一个奇怪的行为我无法理解,通过以下示例代码说明: main.c中 #include int main() { b(); a(); } AC #include void a(void) { printf(“func a in a\n”); } 公元前 #include void a() { printf(“func a in b\n”); } void b() { printf( “func b try to call a \n”); a(); } 编译: gcc -c ac gcc -c bc ar -cr liba.a ao ar -cr […]

覆盖静态库中的弱符号

我想从多个来源为我的项目创建一个静态.a库,其中一些定义弱函数,另一些实现它们。 比方说我有: lib1.c: void defaultHandler() { for(;;); } void myHandler() __attribute__((weak, alias (“defaultHandler”))); lib2.c: void myHandler() { /* do my stuff here */ } 然后我想把它们放到一个单独的库中,这样它对于最终应用程序来说似乎是透明的 $ ar -r libhandlers.a lib1.o lib2.o 但是在myHandler中现在有2个符号myHandler: $ nm libhandlers.a | grep “myHandler” 00000001 W myHandler 00000581 T myHandler 然后在使用lib时,弱引用被链接。 我目前唯一的解决方案是不包含在库lib2.c而是将其作为源添加到应用程序的Makefile中…这是不满意的,因为我只想提供几个库而不是一大堆文件。 –whole-archive选项也不令人满意,因为我在嵌入式系统上工作,我不想包含所有我不需要的东西。 有没有办法编译库,以便弱符号消失,如果提供强大的符号? 注意:我使用的是arm-none-eabi-gcc v4.8

Mac OS X的静态库链接问题:找不到架构x86_64的符号

我正在尝试生成一个静态库并将其与执行二进制文件链接。 这是一个库函数: #include int hello() { return 10; } 使用这些命令,我​​可以得到一个静态库。 gcc -c io.c ar -crv libio.a io.o 使用lip -info ,我检查它是x86_64架构。 ar> lipo -info libio.a input file libio.a is not a fat file Non-fat file: libio.a is architecture: x86_64 这是使用库的主要function。 #include extern int hello(); int main(int argc, char *argv[]) { printf(“%d”, hello()); } 但是,当我将对象与静态库链接时,我有错误。 gcc main.c […]