【问题标题】:Use of ia32-libs使用 ia32-libs
【发布时间】:2012-02-26 07:11:56
【问题描述】:

我正在尝试使用从here 获得的 asmlibrary 我在 64 位中运行,但预编译的静态库是为 32 位构建的。 我真的不想重新编译这个库,因为我没有安装 OpenCV 1.0,也不想安装这么旧版本的软件。

我的雇主告诉我,您可以使用 ia32-libs,这将允许我在 64 位机器上使用该库。我已经使用 apt 安装了这些库。

在我选择的 IDE netbeans 中,我现在正在尝试使用该库。我不断收到消息:

/usr/bin/ld: 输入文件的 i386 架构 `../asmlib/libasmlibrary.a(asm_shape.o)' 不兼容 i386:x86-64 输出

等等。

我有两个问题:

1) ia32-libs 是否允许我使用这个库?

2)我必须如何“启用”它的使用,一般或最好特定于 netbeans(如果适用)

谢谢

【问题讨论】:

    标签: linux netbeans x86


    【解决方案1】:

    可执行文件(包括它所依赖的库)必须完全是 32 位或 64 位。您不能混合和匹配不同类型的目标文件。

    因此,要使用 32 位库,您必须将程序编译为 32 位可执行文件,并与 32 位版本的 libc 和其他核心库链接。在 debian 上,您需要 libc6-dev-i386 和 ia32-libs-dev 等软件包。

    要将 foo.c 编译为 32 位可执行文件,请使用

    gcc -m32 -o foo foo.c

    如何使用 netbeans 来做这个留作练习。

    【讨论】:

    • 或 16 位。嘿,DOS 还没有完全消亡!
    【解决方案2】:

    我认为你不能使用 ia32-libs 来编译 64 位程序,使用 32 位库。这不是 ia32-libs 的设计目的……它旨在在 64 位系统上运行完全 32 位程序

    我认为最好的办法是编译为 32 位软件。如果您使用的是命令行,您只需将-m32 标志添加到gcc。使用 netbeans,在 Project Properties > Build > C Compiler(或 C++ 编译器,如果您正在使用)中,有一个下拉菜单可以选择架构。如果 32 位在该下拉列表中不可用,您可以将 -m32 添加到 其他选项 框中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2016-07-31
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2017-03-22
    相关资源
    最近更新 更多