gpt4 book ai didi

c - 为什么 GCC 根据文件创建共享对象而不是可执行二进制文件?

转载 作者:太空狗 更新时间:2023-10-29 16:26:44 25 4
gpt4 key购买 nike

我有一个我正在 build 的图书馆。当我运行以下任一程序时,我的所有对象都会依次编译和链接:ar rcs lib/libryftts.a $^

gcc -shared $^ -o lib/libryftts.so

在我的 Makefile 中。我也能够成功地将它们安装到 /usr/local/lib当我用 nm 测试文件时,所有的功能都在那里。我的问题是,当我运行 gcc testing/test.c -lryftts -o test && file ./testgcc testing/test.c lib/libryftts.a -o test && file ./测试它说:

test: ELF 64-bit LSB shared object 而不是我期望的 test: ELF 64-bit LSB executable。我做错了什么?

最佳答案

What am I doing wrong?

没有。

听起来您的 GCC 默认配置为构建 -pie 二进制文件。这些二进制文件实际上是 共享库(ET_DYN 类型),除了它们的运行方式与普通可执行文件一样。

所以你应该只运行你的二进制文件,并且(如果它能工作)不用担心它。

或者您可以将您的二进制文件与 gcc -no-pie ... 链接,这应该会生成一个类型为 ET_EXEC 的非 PIE 可执行文件>,file 将显示 ELF 64-bit LSB executable

关于c - 为什么 GCC 根据文件创建共享对象而不是可执行二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com