gpt4 book ai didi

c++ - 如何解决系统和库依赖项之间的 C++ 冲突

转载 作者:太空狗 更新时间:2023-10-29 21:41:19 25 4
gpt4 key购买 nike

我的问题很具体,但请耐心等待。这最终有点像逆向工程,但这个问题似乎更适合这个板子。

所以,我有一个用 C++ 编写的针对 MIPS 编译的共享对象。我没有lib的源代码。该库是使用 GCC 4.3.3 编译的。我想在运行 elementary OS 的 amd64 计算机上使用此共享对象中存在的函数。为此,我使用 sourcery 交叉编译器将一些 C++ 代码交叉编译为 MIPS,这将使用该对象。

到目前为止,除了这个我无法弄清楚的编译错误外,我已经解决了这个问题。该库称为 libdvl.so,并用作依赖项 libc.so.0(两者都与 cpp 代码位于同一文件夹中)。

mips-linux-gnu-g++ -g -L/path/to/lib -Wl,-rpath,/path/to/lib -o verifier verifier.cpp -ldvl

这给了我

(...)/mgc/embedded/codebench/bin/../lib/gcc/mips-linux-gnu/4.9.1/../../../../mips-linux-gnu/bin/ld: warning: libc.so.0, needed by /path/to/lib/libdvl.so, may conflict with libc.so.6
(...)/mgc/embedded/codebench/bin/../lib/gcc/mips-linux-gnu/4.9.1/../../../../mips-linux-gnu/bin/ld: errno@@GLIBC_PRIVATE: TLS definition in (...)/mgc/embedded/codebench/bin/../mips-linux-gnu/libc/lib/libc.so.6 section .tbss mismatches non-TLS definition in /path/to/lib/libc.so.0 section .bss
/path/to/lib/libc.so.0: error adding symbols: Bad value
collect2: error: ld returned 1 exit status

所以我添加了“-l:libc.so.0”并得到了这个

(...)/mgc/embedded/codebench/bin/../lib/gcc/mips-linux-gnu/4.9.1/../../../../mips-linux-gnu/bin/ld: errno: TLS definition in (...)/mgc/embedded/codebench/bin/../mips-linux-gnu/libc/lib/libc.so.6 section .tbss mismatches non-TLS definition in libc.so.0 section .bss
(...)/mgc/embedded/codebench/bin/../mips-linux-gnu/libc/lib/libc.so.6: error adding symbols: Bad value
collect2: error: ld returned 1 exit status

知道如何解决这个问题吗?我知道我使用的是 GCC 4.9.1,但我已经下载了使用 GCC 4.3.154 的旧代码源版本并得到了完全相同的错误。

编辑 1: 正如 Lol4t0 所说,使用 c++filt 进行过滤,它给出了来自 stdc++ 的实际函数名称。使用

mips-linux-gnu-g++ -g -L/path/to/lib -Wl,-rpath,/path/to/lib -I/path/to/lib -o verifier verifier.cpp -ldvl -l:libuClibc++.so.0 -l:libutil.so.0 -l:libc.so.0 -l:ld-uClibc.so.0 -nodefaultlibs

为 libdvl 提供依赖项(因为我不会重写 stdc++ :p),我得到以下编译错误:

(...)/mgc/embedded/codebench/bin/../lib/gcc/mips-linux-gnu/4.9.1/../../../../mips-linux-gnu/bin/ld: /tmp/cc66DLda.o: undefined reference to symbol '_Unwind_Resume@@GCC_3.0'
(...)/mgc/embedded/codebench/bin/../mips-linux-gnu/libc/lib/libgcc_s.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

我已经确认了 lib 依赖项以及它们出现的顺序。对此有什么想法吗?

感谢所有的帮助。

最佳答案

虽然使用 -nodefaultlibs 解决了第一个问题。

关于c++ - 如何解决系统和库依赖项之间的 C++ 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29153924/

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