我想使用一些现有的静态库创建一个名为libXYZ.a
的静态库:libX.a
,libY.a
,libZ.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.cpp
和two.cpp
以在one.o
命令之前获取two.o
和ld
以下内容:
g++ -o one.o one.cpp -c
g++ -o one.o two.cpp -c
libX.a
,libY
。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
错误。关于导致这些错误的原因的任何想法?