标签: libgcc

gcc添加符号的版本(最大)错误:错误值

我已经在Linux x86_x64上成功构建了几个32位,静态和共享库,我现在正试图将它们连接到一个可执行文件,我收到以下错误:

/usr/bin/ld: foo.so: __moddi3: invalid version 21 (max 0)

foo.so: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

其中foo.so是我构建的共享库之一.

__moddi3函数是libgcc Integer Library Routines的一部分.它的签名是:

— Runtime Function: long __moddi3 (long a, long b)
Run Code Online (Sandbox Code Playgroud)

它的规则是为32位代码提供64位算术.

我甚至找不到这个库的版本的含义.

为什么我现在看到这个错误 - 在库已经构建之后?

我用-fPIC-m32标志构建了所有共享库,用于编译和链接.

可执行文件是CXX可执行文件.

这是使用--verbose的链接器输出

Using built-in specs.
COLLECT_GCC=/usr/bin/c++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.4' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new …
Run Code Online (Sandbox Code Playgroud)

c++ g++ 32bit-64bit i386 libgcc

11
推荐指数
2
解决办法
1万
查看次数

为什么rsyslogd找不到libgcc_s.so.1?

场景:在Ubuntu 12.4 lxc主机上运行debootstrapped Ubuntu 11.4 lxc guest虚拟机(均为64位)

在lxc guest中,rsyslogd经常与SIGABRT崩溃,说明:

libgcc_s.so.1 must be installed for pthread_cancel to work
0334.380551272:7f4128a84700: 
Signal 6 (SIGABRT) occured, execution must be terminated.
Run Code Online (Sandbox Code Playgroud)

我不确定为什么找不到libgcc_s.so.1.如果我运行ldconfig -p:

$# ldconfig -p | grep libgcc
        libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
        libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1
Run Code Online (Sandbox Code Playgroud)

它被列出.这两个链接都是有效的.

我该如何解决这个问题?

编辑:objdump -T输出请求:

/lib/x86_64-linux-gnu/libgcc_s.so.1:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
00000000000025d8 l    d  .init  0000000000000000              .init
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 memset
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 abort
0000000000000000  w   D  *UND*  0000000000000000              __gmon_start__
0000000000000000  w   D …
Run Code Online (Sandbox Code Playgroud)

ubuntu gcc rsyslog lxc libgcc

10
推荐指数
1
解决办法
2004
查看次数

scipy 不使用 anaconda 的本地库作为 libgcc

我正在使用Anaconda 4.10.3, with Python 3.9.7, Scipy 1.7.1on Ubuntu 16.04.6。我需要运行的脚本使用 Scipy 的优化,并抛出以下错误:

ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.26' not found (required by /home/user/anaconda3/envs/work/lib/python3.9/site-packages/scipy/optimize/_group_columns.cpython-39-x86_64-linux-gnu.so)
Run Code Online (Sandbox Code Playgroud)

如错误所示,系统libstcc++.so.6不提供GLIBCXX_3.4.26,我使用它进行了验证

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
Run Code Online (Sandbox Code Playgroud)

然后我运行conda install libgcc并验证strings /home/user/anaconda3/envs/work/lib/libstdc++.so.6.0.29 | grep GLIBCXX显示GLIBCXX_3.4.26。然后我将以下行添加到我的.bashrc并运行source ~/.bashrc

LD_LIBRARY_PATH=/home/user/anaconda3/envs/work/lib/:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

当我在此之后运行脚本时,我仍然收到相同的错误 ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.26' not found

我正在考虑降级 scipy,但是难道没有更好的方法可以在不降级的情况下解决这个问题吗?

python scipy python-3.x libgcc anaconda

10
推荐指数
1
解决办法
3156
查看次数

编译libgcc xgcc错误

我正在尝试安装交叉编译器,这个教程,当我想制作libgcc时,我只是放入make all-target-libgcc 我的终端.这使得抛出错误

checking whether ln -s works... yes
checking for i586-elf-gcc...  /usr/src/build-gcc/./gcc/xgcc -B/usr/src/build-gcc/./gcc/         -B/usr/local/cross/i586-elf/bin/ -B/usr/local/cross/i586-elf/lib/ -isystem /usr/local/cross/i586-elf/include -isystem /usr/local/cross/i586-elf/sys-include   
checking for suffix of object files... configure: error: in `/usr/src/build-gcc/i586-elf/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make: *** [configure-target-libgcc] Error 1
Run Code Online (Sandbox Code Playgroud)

在config.log中我找到了

Target: i586-elf
Configured with: ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --        disable-nls --enable-languages=c,c++ --without-headers : (reconfigured) ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --disable-nls --enable-languages=c,c++ --without-headers : (reconfigured) ../gcc-4.8.0/configure --target=i586-elf --prefix=/usr/local/cross --disable-nls --enable-languages=c,c++ …
Run Code Online (Sandbox Code Playgroud)

linux gcc makefile libgcc

9
推荐指数
2
解决办法
6272
查看次数

printf("%.15e", 1e23); 打印?

我正在尝试优化 double->text 转换(试图击败 grissu、ryu 等...)。

在这样做的同时,我将我的结果与sprintf输出进行比较。现在我遇到了上面有趣的案例。

printf("%.15e", 1e23);
Run Code Online (Sandbox Code Playgroud)

(例如 glibc)打印

9.999999999999999e+22

虽然我的日常打印

1.000000000000000e+23

现在这两个数字与“真实值”的距离相同,并且将这两个值转换回(例如使用atof)会产生相同的双精度值。

但是,我相信我的结果满足“四舍五入”规则(这就是它走这条路的原因)。

哪个结果更正确?

c floating-point double printf libgcc

8
推荐指数
1
解决办法
90
查看次数

向 Code::Blocks 添加链接器选项

当我尝试在我的 Win 7 x64 机器上运行使用 Code::Blocks 编译的可执行文件时,它说它无法运行,因为缺少 libgcc_s_dw2-1。

我找到了一个解决方案,将库包含在链接器选项中。(这是我从这里得到的参考:http : //forums.codeblocks.org/index.php?topic=16748.0;prev_next=prev。看最后一篇文章)

问题是,当我转到链接器设置时,在项目构建选项中,那里没有可用的库。我必须下载吗

-static-libgcc
-static-libstdc++
Run Code Online (Sandbox Code Playgroud)

如帖子所述,并将它们放在一个目录中,以便 Code::Blocks 可以看到它们并将它们添加到链接器选项中?如果是,我应该把图书馆放在哪里?

c++ linker codeblocks libgcc

6
推荐指数
1
解决办法
2万
查看次数

树莓派 - 致命错误:sys/cdefs.h:没有这样的文件或目录

我正在尝试使用最新的 Raspbian 系统映像在我的 Raspberry Pi 上编译 gcc5.3.0。

$ ./configure --enbale-checking=release --enable-languages=c,c++,fortran --host=arm-cortexa7_neon-linux-gnueabihf --build=arm-cortexa7_neon-linux-gnueabihf --target=arm-cortexa7_neon-linux-gnueabihf
$ make
Run Code Online (Sandbox Code Playgroud)

但是,原始编译器 (gcc4.9) 在编译 libgcc 时抱怨未创建 sys/cdefs.h。

我检查我有libc6-devbuild-essential安装。

所以我曾经grep -R 'cdefs' /usr/include/搜索过它,我在/usr/include/bsd/找到了它。我创建了 sys 目录并在 /usr/include/bsd/sys 下建立了到这些头文件的硬链接。

这次它给了我一个更奇怪的错误,/usr/include/stdio.h:312:8: error: unknown type name 'FILE'。

我在 stackoverflow 上搜索了这个,还有一个类似的问题,/sf/answers/1473306621/。但是当我删除/usr/include/sys和/usr/include/bsd,然后重新安装libc6-dev时,我在/usr/include下找不到sys/cdefs.h,编译器仍然报错。

我现在完全迷失了。任何建议将不胜感激。

libgcc gcc5 raspberry-pi2

6
推荐指数
1
解决办法
3998
查看次数

完全静态构建具有所有依赖项(libgcc 等)的应用程序?

我目前正在尝试将所有应用程序的依赖项编译为静态库。我的动机:

  1. 不依赖任何操作系统提供的库以获得完美可重现的代码库
  2. 避免在其他系统上部署时由动态链接引起的问题
  3. 链接不同版本的库时避免运行时冲突
  4. 能够为其他操作系统交叉编译

However, as I initially dreaded I had to go down the rabbit hole quite fast. I am currently stuck with OpenCV and I'm sure there is more to come. However, my main questions are:

  1. Is it possible to build an entirely statically build app (e.g. libc, ligcc, etc. ?)
  2. Is it possible to link all libraries statically but link major components (libgcc, etc.) dynamically?
  3. If not, is it possible to link against statically …

c++ linker dynamic-linking static-linking libgcc

6
推荐指数
1
解决办法
1110
查看次数

使用Rust构建的DLL是否在运行时需要libgcc.dll?

如果我使用Rust语言构建DLL ,它是否需要libgcc*.dll在运行时出现?

一方面:

  • 我在互联网上的某个地方看到了一个帖子,声称是的;
  • rustc.exe已经libgcc_s_dw2-1.dll在其目录中,并且cargo.exehttp://crates.io网站下载时不会在没有dll的情况下运行;

另一方面:

  • 我看过有关在Rust中构建玩具操作系统内核的文章,因此他们肯定不需要存在libgcc动态库.

所以,我很困惑.什么是明确的答案?

windows rust libgcc

5
推荐指数
1
解决办法
1817
查看次数

libgcc_s.so是否在同一进程中静态和动态链接?

我的应用程序引入了许多共享库.有些是用C++编写的,它引入了libstdc ++.所以它引入了libgcc_s.so.还有一些是用简单的C编写的,并与-static-libgcc相关联.

所以现在我在多个共享库中静态链接了一些libgcc,并且libstdc ++在运行时动态加载libgcc的其他位.

Q1:这个设置会给我带来麻烦吗?libgcc是否具有会使这种混合链接出现问题的内部状态,还是只是内联函数?

Q2:为了让我的应用程序适用于较旧的Linux,我应该发布libstdc ++.so和libgcc_s.so并在主exe上使用rpath来加载它.这是正确的方法吗?

c c++ linux libstdc++ libgcc

5
推荐指数
1
解决办法
430
查看次数

如何构建GCC编译器的Libgcc

有没有办法在不构建gcc编译器的情况下构建libgcc?

我试图运行libgcc的配置脚本,但它说../../gcc/libgcc.mvars缺失.

我的基本需求是为多个平台构建libgcc,为各种版本的libgcc提供多种配置.

compiler-construction gcc compiler-errors compilation libgcc

5
推荐指数
1
解决办法
5183
查看次数

在编译文件中包含 mingw 库

我正在使用 cmake 生成 Eclipse CDT MinGW 项目。(Eclipse 版本开普勒)

这是我的 Cmakelist:

project(IMGTODICOM)

find_package(ITK REQUIRED)

include(${ITK_USE_FILE})

add_executable(IMGTODICOM IMGTODICOM.cxx)

target_link_libraries(IMGTODICOM ITKReview ${ITK_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

代码在我的电脑上编译运行没有问题,但在其他电脑上却无法运行。libgcc_s_dw2-1.dll需要一些类似的dll 。我在我的电脑中查找了这个dll,并在.dll中找到了它C:\MinGW\bin。为了解决这个问题,我将该文件夹的内容复制到另一台电脑上,exe文件最终运行。但是,我想知道是否有更好的方法在任何 Windows PC 中运行 exe 文件,并在编译过程中添加这些库。

我正在阅读,我应该使编译器链接到静态库。在 Eclipse 中,我尝试在“属性”>“C/C++ 包含路径和符号”以及“项目路径”>“库”下添加 dll,但它不起作用。我尝试修改 CmakeList 但它也不起作用。

我不知道为什么会出现这个问题,也不知道如何将 的内容包含C:\MinGW\bin在 exe 文件中。

非常感谢您的帮助

gcc mingw cmake static-linking libgcc

5
推荐指数
1
解决办法
5861
查看次数

如何处理缺少的libgcc_s.a

交叉使用外部工具链别名编译库的buildroot code sourcery lite 2011导致

output/host/opt/ext-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

由于明显缺失 libgcc_s.a

# find . -iname "libgcc*"        
./output/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libgcc_s.so
./output/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/libgcc_s.so.1
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/armv4t/lib/libgcc_s.so.1
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/armv4t/lib/libgcc_s.so
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/thumb2/lib/libgcc_s.so.1
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/thumb2/lib/libgcc_s.so
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/lib/libgcc_s.so.1
./output/host/opt/ext-toolchain/arm-none-linux-gnueabi/libc/lib/libgcc_s.so
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/armv4t/libgcc.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/armv4t/libgcc_eh.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/plugin/libgcc
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/thumb2/libgcc.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/thumb2/libgcc_eh.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/libgcc.a
./output/host/opt/ext-toolchain/lib/gcc/arm-none-linux-gnueabi/4.6.1/libgcc_eh.a
Run Code Online (Sandbox Code Playgroud)

有没有办法绕过这个问题,但仍然静态链接?是否有CLFAGS或LDFLAGS选项可以静态链接所有内容除外libgcc_s

到目前为止尝试的东西(除了阅读适用的部分ldgcc手册页):

CFLAGS="-static -static-libgcc"
CFLAGS="-static -shared-libgcc"
CFLAGS="-static -static-libgcc -Wl,-Bstatic"
CFLAGS="-static -shared-libgcc -Wl,-Bstatic"
Run Code Online (Sandbox Code Playgroud)

添加后-Wl,-lgcc_s,-Bstatic我得到了大量的未定义/未知符号...(-Bshared不是有效的选项说ld)

/home/bernhard/buildroot-2013.08/output/target/usr/lib/libgio-2.0.a(libgio_2_0_la-glocalfileinfo.o): In function `_g_local_file_info_get':
glocalfileinfo.c:(.text+0x2d90): warning: Using 'getgrgid' in statically linked applications requires at runtime the shared libraries from …
Run Code Online (Sandbox Code Playgroud)

c flags compilation buildroot libgcc

4
推荐指数
1
解决办法
1万
查看次数