意外地,我用--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 ++链接器
g ++ -shared -o“app”./app.o
完成建筑目标:app
执行输出: 分段错误
谢谢
答案 0 :(得分:5)
来自g ++手册: - 共享 生成一个共享对象,然后可以将其与其他对象链接以形成可执行文件。并非所有系统都支持此选项。对于可预测的结果,您还必须指定用于生成代码的同一组选项(-fpic,-fPIC或模型子选项)。[1]
当您放置--shared选项时,这意味着您不需要可执行文件,而是需要共享对象。
在您的情况下,您创建共享库而不是可执行文件。这就是你在启动时发生段错误的原因。