gpt4 book ai didi

gcc - 在没有共享链接的情况下链接共享库

转载 作者:行者123 更新时间:2023-12-02 10:46:58 26 4
gpt4 key购买 nike

我正在尝试使用位于/system/lib/libxyz.so(位于主机设备上)的共享库,并使用动态链接程序:/system/bin/linker-来交叉编译arm汇编代码。在主机设备上。

所以我编译:

arm-eabi-gcc -mcpu="cortex-a9"  -Wl,-dynamic-linker=/system/bin/linker -llibxyz.so -Wl,--unresolved-symbols=ignore-all -nostdlib topsecret.S -o topsecret

我还使用:
-Wl,--unresolved-symbols=ignore-all

忽略任何 undefined symbol ,因为我在编译时实际上没有它们-我正在使用asm代码调用正确的地址。

我得到的小错误是:
arm-eabi/bin/ld cannot find -llibxyz.so, collect2: ld returned 1 exit status

而且我实际上并不想拥有libxyz.so库,我希望编译器忽略该错误,并将依赖项添加到ELF header 中。
我尝试了-Wl,-不需要,-Wl,-需要的参数,但这没有帮助。

问题是我是否可以忽略该错误,伪造该库或任何其他可以给我好的二进制文件(在 header 中具有依赖项)的解决方案。

Link shared library in gcc without file?
这种解决方案不好,因为我不想更改asm代码,而只希望更改编译机制。

最佳答案

抱歉,您无法做任何事情。链接器要查看共享库,以便知道在其中定义了哪些符号,而没有定义。它需要知道以了解链接如何工作。您必须将目标的共享库复制到开发系统,或者按照引用答案中的建议使用显式加载(dlopen等),并使用dlsym()自己创建链接。 - 疯狂的科学家

您可以从主机传输文件以进行构建。如果您不能执行此操作,则链接器将无法知道哪个库中存在未解析的符号。您可以创建一个带有垫片的假主机库,以供实现。即使您无法传输主机库(主机被锁定等),此方法也将起作用。这将允许您在构建计算机上进行链接,并且应通过其加载程序修补到主机上的完整实现。 –无心的噪音

关于gcc - 在没有共享链接的情况下链接共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21116445/

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