代码之家  ›  专栏  ›  技术社区  ›  Vahagn

gcc-m32标志:/usr/bin/ld:跳过不兼容项

  •  10
  • Vahagn  · 技术社区  · 14 年前

    在64位主机上,我正尝试与 -m32 选择权。这些库是否可以与常规的64位库链接?

    我正在做这样的事情:

    g++ -m32 -shared source.cpp -l 64_bit_library.so -o 32_bit_library.so
    

    并获得如下错误信息:

    /usr/bin/ld: skipping incompatible 64_bit_library.so
    

    所以我的问题是:如何 64_bit_library.so 32_bit_library.so 应该在64位主机上编译,以便 32位库。 与…联系起来 64位库。 ?

    1 回复  |  直到 13 年前
        1
  •  11
  •   Flexo - Save the data dump sunny moon    14 年前

    不能将32位应用程序链接到64位库,反之亦然。问题是指针和类型通常不能在它们之间传递。通常,解决方法是生成其他大小的子进程,并使用IPC与该进程通信。

    这样想:如果我有一个C平凡函数:

    extern void foo(void*); 
    

    如果它在64位的库中,我尝试从32位的库中调用它,那么指针的另一半来自哪里?

    相反,如果它在一个32位的库中,我从一个64位的应用程序调用它,那么指针的另一半会发生什么情况,如果调用它,我将不得不丢失它?