偶然地,我用一个hello world c ++程序链接了--shared标志,并得到了一个exe文件。但运行时输出为segfault。有人可以告诉我背后的原因吗?
复制方式:
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
构建目标:应用调用:GCC C ++链接器g ++ -shared -o“ app” ./app.o完成的建筑目标:应用]
执行输出:分割错误
谢谢
从g ++手册: - 共享产生一个共享对象,然后可以将其与其他对象链接以形成可执行文件。并非所有系统都支持此选项。为了获得可预测的结果,当您指定此选项时,还必须指定用于生成代码的相同选项集(-fpic,-fPIC或模型子选项)。[1]
[当您使用--shared选项时,表示您不需要可执行文件,而是共享对象。
根据您的情况,您创建的是共享库而不是可执行文件。这就是为什么在启动段时会出现段错误的原因。
[娜娜娜娜娜娜蝙蝠侠!!!!!!!!