问题标签 [libgcc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - gcc 不会编译缺少的 sys/cdefs.h
尝试在 armhf 嵌入式设备上编译 gcc,但在尝试使用 xgcc 编译 libgcc 时停止,说找不到 sys/cdefs.h
libc6 和 libc6-dev 已经安装,cdefs.h 可以在 /usr/arm-linux-gnueabihf/sys/ 找到
如何将 /usr/arm-linux-gnueabihf 添加到 xgcc 包含路径?
c++ - 将 GCC 4.4 库与 GCC 4.8 应用程序一起使用
我正在编写一个应用程序,我想在 rhel7 上使用 GCC 4.8。我的问题是我需要使用使用基于 rhel6 的 GCC 4.4 构建的第 3 方共享库。
c++ - gcc 无效版本(最大)错误添加符号:错误值
我已经在 Linux x86_x64 上成功构建了几个 32 位、静态和共享库,现在我正在尝试将它们链接到一个可执行文件,但出现以下错误:
其中 foo.so 是我构建的共享库之一。
__moddi3 函数是libgcc 整数库例程的一部分。它的签名是:
而它的作用是为 32 位代码提供 64 位运算。
我什至找不到这个库版本的含义。
为什么我现在看到这个错误 - 在库已经构建之后?
我使用-fPIC和-m32标志构建了所有共享库,用于编译和链接。
可执行文件是 CXX 可执行文件。
这是带有--verbose的链接器输出
python - anaconda2 找不到 GOMP_4.0
我正在尝试使用healpy HEALPiX 的python 实现。我在 Ubuntu 上,使用 anaconda2。我 pip install healpy==1.9.1 并使用 conda list 检查它是否已安装,并且它使用的是 conda pip,而不是系统。当我“导入healpy”时,我得到:
从我发现的问题似乎与 gcc 编译器有关?我以前在这台计算机上安装过这个版本,所以这似乎是 anaconda 找到正确库的问题。
我已经检查并安装了 gcc 版本 4.8.5。我对连接anaconda和库以取得进展的了解还不够,也找不到太多信息!
octave - libgcc_s_dw2-1.dll 包含错误
我在 Windows 10 平台上使用 Octave 4.03 大约一年了。突然之间,当我像往常一样尝试启动 Octave GUI 时,我收到以下错误消息:
文件 libgcc_s_dw2-1.dll 不是为在 Windows 上运行而设计的,或者它包含错误。尝试使用原始安装介质重新安装程序或联系管理员。错误状态:0xc0000020。
任何帮助如何解决这个问题?
c++ - 完全静态地构建具有所有依赖项(libgcc 等)的应用程序?
我目前正在尝试将所有应用程序的依赖项编译为静态库。我的动机:
- 不依赖任何操作系统提供的库以获得完美可重现的代码库
- 避免在其他系统上部署时由动态链接引起的问题
- 链接不同版本的库时避免运行时冲突
- 能够为其他操作系统交叉编译
然而,正如我最初担心的那样,我不得不很快地进入兔子洞。我目前坚持使用 OpenCV,我相信还有更多。但是,我的主要问题是:
- 是否可以构建一个完全静态构建的应用程序(例如 libc、ligcc 等?)
- 是否可以静态链接所有库但动态链接主要组件(libgcc 等)?
- 如果没有,是否可以链接到静态构建的库(例如 OpenCV),但通过动态链接(zlib、libc 等)来满足它们的依赖关系?
- 我在互联网上进行了研究,但找不到详细介绍链接内部结构(静态与动态)的综合指南。你知道一本好书/教程吗?一本关于 gcc 的书能让我走得更远吗?
- 这是一个非常愚蠢的想法吗?
mingw-w64 - windows上遇到不同版本的编译器+libgcc
我有一个第三方库,它依赖于libgcc_s_sjlj-1.dll
. 我自己的程序是在 MSYS2 (mingw-w64) 下编译的,它依赖于libgcc_s_dw2-1.dll
.
请注意,第三方库是纯二进制文件(无源)。另请注意,两者libgcc_s_sjlj-1.dll
都是libgcc_s_dw2-1.dll
32 位的,所以我认为这不是与架构相关的问题。
结果很明显,libgcc_s_dw2-1.dll
基于libgcc_s_sjlj-1.dll
. 我得到的是一个缺少的入口点__gxx_personality_sj0
。
我绝对可以尝试调整我的工具链以与第三方的 保持一致libgcc_s_sjlj-1.dll
,但我不知道我需要付出多少努力才能做到这一点。我在使用这个 setjmp/longjmp 版本的 MSYS2 下找不到这样的 libgcc dll 变体。我什至担心我需要消除整个工具链,因为我在 MSYS2 下拥有的所有二进制文件都位于该libgcc_s_dw2-1.dll
模块的顶部。
My goal is straightforward: I would like to find a solution so that my code will sit on top of libgcc_s_sjlj-1.dll
instead of libgcc_s_dw2-1.dll
. But I don't know if I am asking a stupid question simply because this is just not possible.
ffmpeg - 使用 Android NDK r17 构建 C 库 (FFmpeg):未定义对“__mulodi4”的引用
我的问题恰好出在 FFmpeg 上,但我怀疑几乎所有 C 库都会发生这种情况。
问题描述
我的应用程序使用使用 NDK r10e 编译的 FFmpeg。我正在尝试将所有内容更新到 NDK r17,同时也切换到 clang,因为 Google 更喜欢我们使用它而不是 gcc。
我的第一步是构建 FFmpeg。
为此,我使用该make_standalone_toolchain.py
脚本为 x86 架构创建了一个独立的工具链,如下所示:
然后我配置FFmpeg构建如下:
然后我按如下方式构建它:
一切似乎都编译得很好,但我得到了几个链接器错误,它们都说同样的话:
未定义对“__mulodi4”的引用
我尝试过的解决方案
1. 链接 libclang_rt.builtins*
我在网上发现了一些地方,这表明这是由于 libgcc 不提供__mulodi4
. 一个名为 sitsofe 的 github 用户非常好,可以在这里发布一个解决方法。但是,我确定在哪里可以找到这个libclang_rt.builtins-i686.a
库。这是我在独立工具链目录中找到的内容:
./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-x86_64.a ./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-i386.a ./lib64/clang/6.0. 2/lib/linux/libclang_rt.builtins-aarch64-android.a ./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-mips64-android.a ./lib64/clang/6.0.2/lib/ linux/libclang_rt.builtins-x86_64-android.a ./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-i686-android.a ./lib64/clang/6.0.2/lib/linux/libclang_rt。 builtins-arm-android.a ./lib64/clang/6.0.2/lib/linux/libclang_rt.builtins-mips-android.a
图书馆libclang_rt.builtins-i686-android.a
看起来很近,但(我认为)没有雪茄。当我尝试链接到它时,我得到了同样的错误:
未定义对“__mulodi4”的引用
这是我的新 FFmpeg 构建配置命令:
我检查-v
以确保该行已添加到链接器标志中,并且确实如此。但是,我不知道这个库是否应该工作,更不用说我是否正确地将它添加到链接器标志中。无论如何,我在这里做的事情是行不通的。
2.切换到不同的消毒剂
我没有使用未定义的清理程序,而是尝试切换到地址清理程序。(坦率地说)这是一次彻头彻尾的暗中尝试,基于在本周 Google I/O 的 r17 中模糊地提到了 asan。
在这种情况下,FFmpeg 构建得很好!
但是,当我尝试将 FFmpeg 拉入我的测试项目(一个简单的带有 C++ 支持的 AAR,它只有一个调用 的 jni 方法时av_gettime()
,我得到了大量的链接器错误:
错误:错误:未定义引用“__asan_option_detect_stack_use_after_return”
错误:错误:未定义引用“__asan_stack_malloc_0”
错误:错误:未定义引用“__asan_report_load4”
错误:错误:未定义引用“__asan_report_load4”
错误:错误:未定义引用“__asan_shadow_memory_dynamic_address”
错误:错误:未定义引用“__asan_option_detect_stack_use_after_return”
错误:错误:未定义引用“__asan_stack_malloc_0”
错误:错误:未定义引用“__asan_report_load4”
错误:错误:未定义引用“__asan_report_load4”
错误:错误:未定义引用“__asan_shadow_memory_dynamic_address'
错误:错误:未定义引用“__asan_option_detect_stack_use_after_return”
错误:错误:未定义引用“__asan_stack_malloc_0”
错误:错误:未定义引用“__asan_report_store4”
错误:错误:未定义引用“__asan_report_store4”
错误:错误:未定义引用“__asan_init”
错误:错误:未定义对“__asan_version_mismatch_check_v9”的引用
所以似乎找到了FFmpeg库就好了,说明我的CMake文件的那部分是正确的,但是它找不到这些asan引用中的任何一个。
这似乎是人们遇到的一个常见问题,但我找不到真正适合我的解决方法。
gcc - 为 32 位编译 libgcc.a 和 libstd++.a
下午好,
如果我今天在这里是因为我遇到了一些编译问题。对于一个项目,我想编译 gcc 以获得 32 位的 libgcc.a 和 libstd++.a。不幸的是我有一些问题。以下是我用来配置和编译所需库的命令行:
当我执行最后一个命令行时,我遇到了这些错误:
我的机器:
Archlinux 64 位,最新
gcc -v 的输出:
谢谢您的帮助 !
编辑:在这里回答
对于那些想知道如何在 x86_64 机器上为 32 编译 libgcc 和 libstdc++ 的人来说:
然后转到包含新安装的文件夹,通常会有两个文件夹:lib32 和 lib64。在 lib32 中,有 32 位版本的 libgcc 和 libstdc++,在 lib64 中,有 64 位版本。
享受 !