当我尝试在我的ubuntu 14.04 64位系统上创建一个共享库时,我遇到了这个错误:
g++ -Wall -g -Iinclude -c /home/pure/Schreibtisch/TestDLL/src/test.cpp -o obj/Debug/src/test.o g++ -shared obj/Debug/src/test.o -o bin/Debug/TestDLL.so collect2: error: ld terminated with signal 6 [Abgebrochen], core dumped /usr/bin/ld: ld: wcsrtombs.c:99: __wcsrtombs: Zusicherung »data.__outbuf[-1] == '\0'« nicht erfüllt.
我还尝试从一个带有空构造函数和空析构函数的简单类创建一个简单的共享库,同样的错误来了。
任何人都可以帮我解决这个问题吗? 如果需要更多信息,我可以告诉他们。
纯@ pure-QOSMIO-X500:〜$ g ++
的/ usr /斌/克++
纯@ pure-QOSMIO-X500:〜$ g ++ --version
g ++(Ubuntu 4.8.2-19ubuntu1)4.8.2 版权所有(C)2013 Free Software Foundation,Inc。 这是免费软件;查看复制条件的来源。没有 保证;甚至不适用于适销性或特定用途的适用性。
而且:
LC_ALL = C g ++ -shared /home/pure/Schreibtisch/TestDLL/obj/Debug/src/test.o -o /home/pure/Schreibtisch/TestDLL/libTestDLL.so
立即返回:
/ usr / bin / ld:/home/pure/Schreibtisch/TestDLL/obj/Debug/src/test.o:在制作共享对象时,不能使用针对`_ZTV4test'的重定位R_X86_64_32S;用-fPIC重新编译 /home/pure/Schreibtisch/TestDLL/obj/Debug/src/test.o:错误添加符号:错误值 collect2:错误:ld返回1退出状态
答案 0 :(得分:1)
/ usr / bin / ld:/home/pure/Schreibtisch/TestDLL/obj/Debug/src/test.o: 当重定位R_X86_64_32S对``_ZTV4test'时不能使用 制作共享对象; 使用-fPIC重新编译 /home/pure/Schreibtisch/TestDLL/obj/Debug/src/test.o:添加错误 符号:错误值collect2:错误:ld返回1退出状态
我不知道你为什么会遇到使用本地语言环境(德语)的崩溃以及使用默认语言环境的有用错误消息。但是,现在链接器本身会告诉您错误的原因:您没有使用-fPIC
编译目标代码。
PIC 代表位置无关代码,对于共享库是必需的,因为它们在内存中的位置事先是未知的。例如,使用-fPIC
生成的代码使用跳转的相对而非绝对地址。