我有一个C ++项目。我正在使用OS X for iOS上的Autotools测试交叉编译。我配置:
$ echo $IOS_SYSROOT
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.2.sdk
$ CXXFLAGS="-DNDEBUG -g2 -O3 -arch arm64" ./configure --with-sysroot="$IOS_SYSROOT" --build=`config.guess` --host=aarch64-ios
make
导致其结果(为清晰起见而添加换行符):
libtool: compile: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
-DHAVE_CONFIG_H -I. ... -DNDEBUG -g2 -O3 -arch arm64 -MT adhoc.lo -MD -MP -MF .deps/adhoc.Tpo -c adhoc.cpp -o adhoc.o
In file included from adhoc.cpp:2:
In file included from /usr/include/c++/4.2.1/iosfwd:44:
In file included from /usr/include/c++/4.2.1/bits/c++config.h:41:
In file included from /usr/include/c++/4.2.1/bits/os_defines.h:61:
In file included from /usr/include/unistd.h:71:
In file included from /usr/include/_types.h:27:
In file included from /usr/include/sys/_types.h:32:
/usr/include/sys/cdefs.h:658:2: error: Unsupported architecture
#error Unsupported architecture
...
请注意正在使用错误的头文件。使用构建系统的头文件而不是iPhone头文件。我相当肯定--with-sysroot
没有被尊重。搜索关键字似乎表示其为widespread problem with Autoconf(基于尝试使用该功能的所有错误报告)。
手动添加CXXFLAGS="-sysroot=$IOS_SYSROOT -arch arm64 ...
似乎可以解决问题。这似乎与Bug 79885: --with-build-sysroot= does not get honored throughout the build详述的问题(或几乎相同的问题)相同。
似乎没有AC_SYSROOT
(或类似)将--with-sysroot
复制到AM_CXXFLAGS
。在Autoconf网站上搜索关键字并未返回有用的匹配:"--with-sysroot" site:https://www.gnu.org/software/autoconf/manual。
我们如何处理Autoconf --with-sysroot
选项?包装工人应遵循的做法是什么?
以下是Autoconf项目文件:cryptopp-autotools。有两个感兴趣的文件,它们是configure.ac
和Makefile.am
。我目前还不确定这个问题的适用范围。
这里是Autoconf告诉用户使用它的消息:
$ ./configure --help | grep sysroot
--with-sysroot[=DIR] Search for dependent libraries within DIR (or the
compiler's sysroot if not specified).
如果Autoconf无法正确接入--with-sysroot
,我更愿意压制消息。否则,用户将填写针对我们的错误报告。