如何在没有libiconv符号名的OSX上构建iconv的静态库
How to build a static lib of iconv on OSX without libiconv symbol names?
我试图在OSX上构建gnu iconv作为静态库。这不是问题,使用
就可以了。./configure --enable-static
make clean && make
但是当我在libiconv上运行nm时。a,我得到以下结果
...
_libiconv
_libiconv_open_
_libiconv_close_
...
这是有问题的,因为我想使用这个库构建libxml2,它需要以下符号
iconv
iconv_open
iconv_close
查看头文件,这两个符号名之间的区别似乎在于是否定义了LIBICONV_PLUG。但是当我运行make as
make clean && make CPPFLAGS=-DLIBICONV_PLUG
我得到错误,因为几个东西没有定义,如ICONV_GET_DISCARD_ILSEQ和ICONV_SET_HOOKS。再次查看头文件,只有在LIBICONV_PLUG未定义时才定义这些参数。
我的问题是,我是否正确使用LIBICONV_PLUG ?是否有其他方法来获得我需要的符号的静态库?我应该遍历未定义的符号,然后自己动手定义它们吗?
有三种可能的方法来构建和使用GNU libiconv。在这三种情况下,它为C或c++程序(通过头文件)定义的符号是'iconv_open', 'iconv', 'iconv_close'。
-
正常的是,在对象文件级别,它定义符号'libiconv_open'等,以便不与操作系统的标准库冲突。符号在C级和对象文件级之间的映射发生在
使用GNU libconv。{so,dylib,a},反之亦然。这是一个特性,因为两者的特性略有不同(OS X libiconv。dylib支持名为"UTF-8-MAC"的编码,而GNU libiconv有许多改进和修复),不匹配会导致麻烦。 -
如果你是一个系统供应商,你可以用这样的方式来构建GNU libiconv,它定义了'iconv_open'而不是'libiconv_open',等等。这可以通过对icon .h的简单编辑来实现。
或者,特别是在OS X上,您可以从https://opensource.apple.com/中选择libiconv并为自己编译它。但是要注意,这个版本是基于GNU libiconv 1.11的,也就是说,它是相当旧的。
-
正如GNU libiconv的README中所解释的,LIBICONV_PLUG标志创建了一个库,该库将覆盖系统中的功能;
仅适用于GNU、Solaris和OSF/1。
在您的情况下,如果您只想让GNU libiconv被一些自由软件包(如libxml2)使用,最简单的方法是采用第一种方法,并在该包的编译过程中,使用-I和-L选项使其找到GNU libiconv头文件和库。
事实上,libxml2使这很容易:它的配置脚本已经有一个选项——with-iconv=prefix,通过它可以指定安装GNU libiconv的目录层次结构(prefix/include/中的头文件和prefix/lib/中的目标文件);然后configure脚本将合成适当的-I和-L选项。
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- Xcode OSX上的C++构建失败,出现多个错误文件IO..不可用:在macOS 10.15中引入
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 在 OSX 上从源代码构建 GIMP 2.10 在"gimp-debug-tool-2.0"失败
- 构建共享对象 - 使用 Ninja 编译适用于 OSX 和 Windows 上的 Ubuntu Crush
- QT 5.2.1无法在Mac OSX 10.8.5上构建
- 使用SCON在Mac OSX 10.9上构建
- QT CIMG不会在OSX 10.9上构建
- OSX 上的应用程序构建找不到配置文件
- QtCreator构建系统在OSX升级后损坏
- OSX Scons构建共享库:体系结构x86_64的未定义符号
- Mac OSX:构建opencv_contrib致命错误:找不到文件 opencv2/core.hpp
- osx - 构建 POCO 库时出现链接错误
- "Thread" Boost 无法在 OSX 上构建?
- 如何解决 OSX cctools 中的构建错误
- 使用带有python绑定的boost在osx上构建32位版本的libtorrent
- 如何在Qt/C++中构建一个自定义的本机OSX webkit小部件
- 在OSX上使用CMake构建Unity原生捆绑包
- .framework文件在osx构建配置
- OSX:构建MySQL c++连接器