<分区>
我想使用一些现有的静态库创建一个名为 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 ./
)。我在 ld
行中添加了 C++ 标准库链接器标志 -lstdc++
。但是我在做的时候出现了以下错误:
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
错误。关于导致这些错误的原因有什么想法吗?