【问题标题】:glib installation :32bit Glib library installation on x86_64bit ( 64bit ) machineglib 安装:在 x86_64bit ( 64bit ) 机器上安装 32bit Glib 库
【发布时间】:2020-03-06 06:07:34
【问题描述】:

我已经从这里下载了 glib 2.56 源代码:

https://download.gnome.org/sources/glib/2.56/

然后我尝试使用以下命令在 64 位 x86_64 平台上构建和安装 32 位 glib 库:-

../configure CC='/local/common/pkgs/gcc/v6.3.0p2/bin/gcc -m32' CXX='/local/common/data/gcc/v6.3.0p2/bin/g++ -m32' CFLAGS='-fPIC -O2' CXXFLAGS='-fPIC -O2' LD_LIBRARY_PATH=/local/common/data/gcc/v6.3.0p2/lib LDFLAGS=-m32 --enable-static=yes --prefix=/home/gout/source_glib/32bit_glib/glib-2.56.1/glib_32bit --enable-libmount=no PYTHON=/local/common/data/python/v2.7.6/bin/python --with-pcre=/home/gout/pcre_32bit/pcre-8.20/pcre_install

make
make install

在构建代码时(使用“make”命令)。我遇到了以下问题:-

/local/common/pkgsData/gcc-v6.3.0p2/Linux/RHEL6.0-2013-x86_64/bin/ld: i386:x86-64 architecture of input file `.libs/glib_probes.o' is incompatible with i386 output

我找到了那个文件“glib_probes”。正在使用 64 位架构创建。

[gout@il-gout glib]$ file .libs/glib_probes.o
.libs/glib_probes.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

上面的特定文件是由命令创建的:-

/bin/sh ../libtool --mode=compile --silent --tag=CC dtrace -G -s ../../glib/glib_probes.d -o glib_probes.lo

我们在 glib 源代码中运行上述命令的规则是:-

glib_probes.lo: glib_probes.d
    $(AM_V_GEN) $(LIBTOOL) --mode=compile $(AM_V_lt) --tag=CC $(DTRACE) -G -s $< -o $@

变量LIBTOOL 指向libtool 在运行./configure 脚本后创建的脚本。我已经提到 CC= '/local/common/pkgs/gcc/v6.3.0p2/bin/gcc -m32' 来配置脚本,但这个特定的文件 glib_probes.o 仍然是使用 64 位架构创建的。不知道创建 glib 库有什么问题。

我确认所有其他文件都是使用 32 位架构创建的,除了上述文件...请帮助我解决此问题。此问题导致无法创建 libglib-2.0.la

  CCLD     libglib-2.0.la
/local/common/data/gcc-v6.3.0p2/Linux/RHEL6.0-2013-x86_64/bin/ld: i386:x86-64 architecture of input file `.libs/glib_probes.o' is incompatible with i386 output

【问题讨论】:

    标签: installation glib libtool systemtap


    【解决方案1】:

    glib 使用的 Meson 构建脚本不会传递在配置时指定的 CC 设置。 Systemtap 的dtrace 工具使用环境中的CC,因此您可以这样调用make:

    CC="/local/common/pkgs/gcc/v6.3.0p2/bin/gcc -m32" make
    

    或者,如果您不需要这些探测器,您可以在配置时使用 --disable-dtrace 禁用它们。

    【讨论】:

    • 顺便说一句,我使用了 --disable-dtrace,并且能够构建 glib 库..不确定我的应用程序是否需要探测东西。创建 glib 库后。当我尝试在我的应用程序中使用该库时,我面临:未定义的符号:pthread_key_create。
    • 不,您必须在调用make 期间设置CC。您不太可能需要探针,它们仅用于调试。
    • 弗洛里安,我们的回归因恍惚错误而失败。不确定是否是因为跳过构建探测的东西。我想在创建构建时包含探测的东西。设置环境变量并触发 make 应该可以正常工作吗?即 setenv CC '/local/common/pkgs/gcc/v6.3.0p2/bin/gcc -m32' 然后在'make'之后
    • setenv 听起来像 csh,我对此并不熟悉。但它应该工作。也许生成的 makefile 会做一些有趣的事情。如果一切都失败了,您可以为gcc 引入一个包装脚本并将其放在PATH 上。
    猜你喜欢
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    相关资源
    最近更新 更多