安装库时,它是"ar"、"libtool"、"ranlib"还是其他决定它是 32 位还是 64 位的库之一?



来自重新编译libiconv的代码段,gettext未定义的符号发生在已经成功安装之后;想把它变成自己的问题。

尝试在简单的.c文件中使用libiconv

#include <iconv.h>
// works: gcc -m32 -I/usr/local/include -liconv -o test-iconv.exe test-iconv.c
// does NOT work: gcc -I/usr/local/include -liconv -o test-iconv.exe test-iconv.c
int main(int argc, char **argv) {
    iconv_t conv = iconv_open("ISO8859-1", "UTF-8");
    if (conv != (iconv_t) -1) {
    return 0;
    }
    return 1;
}

如果我没有为gcc指定-m32,则我收到以下错误:

$ gcc -I/usr/local/include -liconv -o test-iconv.exe test-iconv.c
Undefined symbols for architecture x86_64:
  "_libiconv_open", referenced from:
      _main in ccr9tTic.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

当您"安装"库时,该库已经构建,安装无法更改它是32位库还是64位库。

控制库是32位还是64位(或者两者都适用,如果您使用的是macOS Sierra或Mac OS X(的是对象文件的编译方式。如果使用gcc -m32进行编译,则对象文件将为32位,库将为32位数;如果使用-m64进行编译,它们将是64位的。如果不使用任何选项进行编译,则会得到默认行为,而默认行为取决于平台和编译器的构建方式。如果您使用的是Mac操作系统,则可以将32位和64位版本编译为单个对象文件,然后创建一个同时包含32位和64bit的库。

从外观上看,您需要确保使用64位选项编译libiconv。您可能需要使用./configure CC='gcc -m64' CXX= g++-m64 或类似于强制64位编译的东西——这是我有时使用的技巧。

相关内容

  • 没有找到相关文章

最新更新