【问题标题】:Core Dumped while creating shared library创建共享库时转储核心
【发布时间】:2014-09-04 12:15:47
【问题描述】:

当我尝试在我的 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@pure-QOSMIO-X500:~$ which g++

/usr/bin/g++

pure@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: 重定位 R_X86_64_32S 反对 `_ZTV4test' 制作共享对象时不能使用;使用 -fPIC 重新编译 /home/pure/Schreibtisch/TestDLL/obj/Debug/src/test.o:添加符号时出错:值错误 collect2:错误:ld 返回 1 个退出状态

【问题讨论】:

  • gdb分析核心文件。
  • 尝试在英文系统上构建相同的源代码。
  • 是的,请在开始编译过程之前执行类似 export LC_ALL=C (或对您的 shell 类似)之类的操作。
  • 您能否告诉我们您使用的是库存编译器和 binutils,还是安装了自定义版本?请执行which g++g++ --version 并告诉我们输出结果。
  • @FlorianKeßeler 是否真的需要预先将语言环境设置为 C 才能使用 g++ 成功编译共享库?这是一个笑话还是只是旧编译器中的一个错误?

标签: c++ linux ubuntu g++


【解决方案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 生成的代码使用相对地址而非绝对地址进行跳转。

【讨论】:

  • 知道了,没有错误,现在编译并获得共享库!谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-03-06
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
相关资源
最近更新 更多