如何使用GCC基于其他静态库创建静态库?

时间:2014-06-04 16:06:12

标签: c++ gcc linker static-libraries ld

我想使用一些现有的静态库创建一个名为libXYZ.a的静态库:libX.alibY.alibZ.a和一些目标文件。我用来构建静态库libXYZ.a的命令行是:

ld -o libXYZ.a one.o two.o -L./ -L/cygdrive/c/cygwin/lib/gcc/i686-pc-cygwin/4.8.2 -lX -lY -lZ -lstdc++

我使用Cygwin GCC(g ++)编译one.cpptwo.cpp以在one.o命令之前获取two.old以下内容:

g++ -o one.o one.cpp -c
g++ -o one.o two.cpp -c

libX.alibY。a,libZ.a都位于当前目录中(这就是-L./的原因)。我在-lstdc++行添加了C ++标准库链接器标记ld。但是当我做到这一点时我收到了以下错误:

one.o: one.cpp:(.text+0x32): undefined reference to `_Unwind_Resume'
ld: one.o: bad reloc address 0xd in section `.text$_ZN10ConfigC1Ev[__ZN10ConfigC1Ev]'
Makefile:22: recipe for target 'libXYZ.a' failed

所以我的问题是:ld命令是否是从其他静态库和.o文件构建静态库的正确命令?是什么原因造成的?我搜索了论坛,发现它可能是由一些不兼容的编译器引起的。但我使用相同的GCC编译器构建了所有源代码。

更新:

我再次尝试使用以下命令:

ld -o libXYZ.a one.o two.o -L./ -lX -lY -lZ

但我仍然遇到以下错误:

one.o:one.cpp:(.text+0x32): undefined reference to `_Unwind_Resume'
one.o:one.cpp:(.text+0x12a): undefined reference to `_Unwind_Resume'
...
./libX.a(wrapper.o):wrapper.cpp:(.text+0x7ba): undefined reference to `__chkstk_ms'
./libX.a(wrapper.o):wrapper.cpp:(.text+0x7ba): undefined reference to `_Unwind_Resume'
...

我省略了许多类似的错误,例如上面的_Unwind_Resume错误。关于导致这些错误的原因的任何想法?

1 个答案:

答案 0 :(得分:-1)

  

所以我的问题是:ld命令是否是从其他静态库和.o文件构建静态库的正确命令?

没有。有关如何完成此操作,请参阅this answer