相关疑难解决方法(0)

429
推荐指数
8
解决办法
17万
查看次数

什么是--start-group和--end-group命令行选项?

这些命令行选项的目的是什么?请帮助破译以下命令行的含义:

-Wl,--start-group -lmy_lib -lyour_lib -lhis_lib -Wl,--end-group -ltheir_lib
Run Code Online (Sandbox Code Playgroud)

显然它与链接有关,但GNU手册很安静,究竟是分组的意思.

linker gcc ld

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

如何在x86_64机器上编译glibc 32bit

我正在尝试在x86_64上编译glibc(作为辅助,而不是系统替换)2.6,并试图让它生成32位对象.当我给它一个标准配置时,它编译得很好,产生通常的64位库对象.一些信息:

$ uname -a
Linux localhost.localdomain 2.6.18-164.11.1.el5 #1 SMP Wed Jan 20 07:32:21 \
EST 2010 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/redhat-release
CentOS release 5.4 (Final)
Run Code Online (Sandbox Code Playgroud)

除其他外,我尝试了以下内容:

尝试1:

$ # [in build/glibc-2.6]
$ ../../src/glibc-2.6/configure --prefix=$HOME/glibc32-2.6 \
                                --with-cpu=i386-pc-linux-gnu

...

checking sysdep dirs... configure: error: The i386-pc-linux-gnu
subspecies of x86_64 is not supported."
Run Code Online (Sandbox Code Playgroud)

尝试2:

$ ../../src/glibc-2.6/configure --prefix=$HOME/glibc32-2.6 \
                                --host=i386-pc-linux-gnu

...

$ make
Run Code Online (Sandbox Code Playgroud)

配置成功,但make会导致编译错误流,如下所示:

nptl/sysdeps/i386/tls.h:65:3: error: #error "TLS support is required."
In file included from include/tls.h:6,
                 from sysdeps/unix/sysv/linux/i386/sysdep.h:30,
                 from <stdin>:1: …
Run Code Online (Sandbox Code Playgroud)

linux glibc

19
推荐指数
3
解决办法
3万
查看次数

预测2.6.16和2.6.26内核版本之间的"内核太旧"错误

我使用内核2.6.26-2-amd64在运行Linux(Debian)的机器上构建应用程序,我想在运行Linux(Suse)的另一台机器上运行此应用程序,内核为2.6.16.60-0.21-smp,但是我收到错误"致命:内核太旧".

我从互联网上的研究中得知,这可能发生在针对未编译为支持旧内核版本的glibc库构建时,但它通常涉及2.4版本.是否有可能为同一系列的内核(2.6)获取此类错误,或者这可能来自其他内容?

另外我读到这个问题的解决方案是使用适当的--enable-kernel = VERSION选项编译的另一个版本的glibc重建应用程序.作为替代方案,您可以动态地将您的应用程序与glibc链接以解决问题吗?

谢谢您的帮助.

更新:我理解我的问题可能看似含糊不清或已经提到的解决方案之一(动态链接,建立在另一个[虚拟]系统上,重建glibc [考虑到我读到的关于它的评论看起来相当棘手])但是我是什么最终寻找是预防此类问题的方法.

例如,是否有可能找到哪些版本的Linux内核与特定版本的glibc兼容?

更新2:我最终找到了glibc的源补丁(对于Debian,但我猜其他发行版有类似的在线文档)(我猜)包含我正在寻找的信息.

从这个页面:

--- eglibc-2.11.2.orig/debian/sysdeps/linux.mk
+++ eglibc-2.11.2/debian/sysdeps/linux.mk
@@ -0,0 +1,51 @@
[...]
+MIN_KERNEL_SUPPORTED := 2.6.18
[...]
+# Minimum Kernel supported
+with_headers = --with-headers=$(shell pwd)/debian/include
--enable-kernel=$(call xx,MIN_KERNEL_SUPPORTED)
[...]
Run Code Online (Sandbox Code Playgroud)

这解释了"内核太老"的错误.希望它能帮助其他人.

c++ linux linux-kernel

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

如何避免二进制文件中的STT_GNU_IFUNC符号?

我需要部署到Red Hat 4.1.2框(具有gcc 4.1.2).我在Ubuntu 11.10上使用GCC 4.6.1进行开发.不幸的是,我的构建过程创建的一些二进制文件在RedHat机器上不可用.原因似乎是ABI更改,根据另一个Stackoverflow问题导致STT_GNU_IFUNC符号的引入.有没有办法阻止导出任何这样的符号,以便我的二进制文件可以使用旧的ABI?我使用nm在我的二进制文件中查找"i"类型的任何符号,但没有找到.

我问这个,因为我的一些其他的二进制文件,以及一些第三方库我建(TBB,升压),不使用新的ABI等运行RedHat的机器上的罚款.

希望很清楚.提前致谢.

linux gcc abi

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

标签 统计

gcc ×3

linux ×3

linker ×2

abi ×1

c++ ×1

glibc ×1

ld ×1

linux-kernel ×1