1

意外地,我将 --shared 标志与一个 hello world c++ 程序链接并得到了一个 exe 文件。但是当我运行它时输出是段错误。有人可以告诉我背后的原因吗?

重现方式:

eclipse c++ 中的标准 c++ hello world 问题。检查设置中的共享标志框-> 共享库设置。

构建输出:

生成所有构建文件:../app.cpp 调用:GCC C++ 编译器 g++ -O0 -g3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"app.d" -MT"app.d " -o "app.o" "../app.cpp" 完成构建:../app.cpp

构建目标:app 调用:GCC C++ Linker g++ -shared -o "app" ./app.o
完成构建目标:app

执行输出:分段错误

谢谢

4

1 回答 1

7

来自 g++ 手册: --shared 生成一个共享对象,然后可以将其与其他对象链接以形成可执行文件。并非所有系统都支持此选项。为了获得可预测的结果,您还必须在指定此选项时指定用于生成代码的同一组选项(-fpic、-fPIC 或模型子选项)。 [1]

当您放置 --shared 选项时,这意味着您不想要一个可执行文件,而是一个共享对象。

在您的情况下,您创建的是共享库而不是可执行文件。这就是为什么您在启动它时会出现段错误。

于 2013-07-27T18:48:56.770 回答