- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编译的项目一点也不复杂,除了标准库和一个独立的库(一切都在另一个系统上编译正常)之外,什么都不引用。正如标题所示,它甚至不能链接到标准库中的某些东西,因为那里的东西应该没有用 -fPIC
编译。我没有自己构建它,也不想构建它,并且使用 apt
重新安装似乎无法解决“使用 -fPIC 重新编译”问题。
我会说,我认为问题的一个可能来源是 gcc-multilib
或之前安装的某些东西,但我认为它已被清除。我不知道,也许有些东西被覆盖了或者发生了冲突。可能连关系都没有。有什么想法吗?
运行 Ubuntu 18.04
g++ -I inc -I /usr/include/mono-2.0 -MMD -MF dep/Nonsense.d -std=c++17 -O3 -fno-stack-protector -fno-unroll-loops -fomit-frame-pointer -Wno-ignored-optimization-argument -c -o obj/Nonsense.o src/Nonsense.cpp
g++ -I inc -I /usr/include/mono-2.0 -MMD -MF dep/Socket.d -std=c++17 -O3 -fno-stack-protector -fno-unroll-loops -fomit-frame-pointer -Wno-ignored-optimization-argument -c -o obj/Socket.o src/Socket.cpp
g++ -shared -flto -o libNonsense.so obj/Nonsense.o obj/Socket.o -Llib -lenet
/usr/bin/x86_64-linux-gnu-ld: obj/Socket.o: relocation R_X86_64_PC32 against symbol `_ZTISt13runtime_error@@GLIBCXX_3.4' can not be used when making a shared object; recompile with -fPIC
/usr/bin/x86_64-linux-gnu-ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
makefile:22: recipe for target 'libNonsense.so' failed
make: *** [libNonsense.so] Error 1
最佳答案
显然,在 64 位平台上必须使用 -fPIcflags进行编译。如果您正在使用带有 32 位库的 linkink 制作 32 位项目;你不需要-fPIC。实际上,如果没有 -fPIC,动态链接器会重新计算全局变量和函数的地址(在编译步骤中事先不知道)。但是,在 64 位系统中,无法使用此技术,因为它需要提前猜测地址的大小。PIC(Position Independent Code),使用了更精密复杂的工艺。 https://eli.thegreenplace.net/2011/11/11/position-independent-code-pic-in-shared-libraries-on-x64用于解释。
关于linux - 重定位 R_X86_64_PC32 针对符号 _ZTISt13runtime_error@@GLIBCXX_3.4 不能在创建共享对象时使用;使用 -fPIC 重新编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51547552/
我有一个 linux 机器,我在上面编译并安装了更新版本的 GCC (4.3.9),它位于/usr/lib 中。 我使用此编译器构建了一组库,并将其捆绑到 RPM 中,但是当我尝试安装该 RPM 时,
我正在尝试使用 GCC 4.9.0 构建一个二进制文件,该二进制文件向后兼容 libstdc++ .根据 GCC 的 ABI Policy and Guidelines和 Options Contro
我是一名优秀的程序员,十分优秀!