在C库上产生的过程导致与architecure有关的链接错误。我试图为iOS构建库,但它已取决于libxml2,在这种情况下,我猜是Mac只有库libxml2链接错误的iOS库
脂-info证实了相同的
ADMIN $脂-info /usr/local/lib/libxml2.dylib 非FAT文件:/usr/local/lib/libxml2.dylib是架构:x86_64的
ld: warning: ignoring file /usr/local/lib/libxml2.dylib, file was built for x86_64 which is not the architecture being linked (armv7): /usr/local/lib/libxml2.dylib Undefined symbols for architecture armv7: "_xmlAddChild", referenced from: _setIsoId in libspatialite.a(gg_xml.o) referenced from: _vxpath_eval_expr in libspatialite.a(libsplite_la-virtualxpath.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[4]: * [demo1] Error 1 make[3]: [install-recursive] Error 1 make[2]: [install-strip] Error 2 make 1 : * [/Users/admin/Downloads/libspatialite-ios-master/build/armv7/lib/libspatialite.a] Error 2 make: *** [build_arches] Error 2
编辑#1
经过评论,libspatailite配置和make部分在make文件中,我注意到其他依赖关系如gets,proj,sqlite正在为所有平台armv7,armv7s,arm64,i386,x86_64生成。
lipo -info对这些库的确认是一致的。所以问题仅限于构建libspatialite。
Makefile文件(为了建立仅libspatialite.a)
XCODE_DEVELOPER = $(shell xcode-select --print-path)
IOS_PLATFORM ?= iPhoneOS
# Pick latest SDK in the directory
IOS_PLATFORM_DEVELOPER = ${XCODE_DEVELOPER}/Platforms/${IOS_PLATFORM}.platform/Developer
IOS_SDK = ${IOS_PLATFORM_DEVELOPER}/SDKs/$(shell ls ${IOS_PLATFORM_DEVELOPER}/SDKs | sort -r | head -n1)
all: lib/libspatialite.a
lib/libspatialite.a: build_arches
mkdir -p lib
mkdir -p include
# Copy includes
cp -R build/armv7/include/geos include
cp -R build/armv7/include/spatialite include
cp -R build/armv7/include/*.h include
# Make fat libraries for all architectures
for file in build/armv7/lib/*.a; \
do name=`basename $$file .a`; \
lipo -create \
-arch armv7 build/armv7/lib/$$name.a \
-arch armv7s build/armv7s/lib/$$name.a \
-arch arm64 build/arm64/lib/$$name.a \
-arch i386 build/i386/lib/$$name.a \
-arch x86_64 build/x86_64/lib/$$name.a \
-output lib/$$name.a \
; \
done;
# Build separate architectures
build_arches:
${MAKE} arch ARCH=armv7 IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin
${MAKE} arch ARCH=armv7s IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin
${MAKE} arch ARCH=arm64 IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin
${MAKE} arch ARCH=i386 IOS_PLATFORM=iPhoneSimulator HOST=i386-apple-darwin
${MAKE} arch ARCH=x86_64 IOS_PLATFORM=iPhoneSimulator HOST=x86_64-apple-darwin
PREFIX = ${CURDIR}/build/${ARCH}
LIBDIR = ${PREFIX}/lib
BINDIR = ${PREFIX}/bin
INCLUDEDIR = ${PREFIX}/include
CXX = ${XCODE_DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
CC = ${XCODE_DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
CFLAGS = -isysroot ${IOS_SDK} -I${IOS_SDK}/usr/include -arch ${ARCH} -I${INCLUDEDIR} -miphoneos-version-min=7.0
CXXFLAGS = -stdlib=libc++ -std=c++11 -isysroot ${IOS_SDK} -I${IOS_SDK}/usr/include -arch ${ARCH} -I${INCLUDEDIR} -miphoneos-version-min=7.0
LDFLAGS = -stdlib=libc++ -isysroot ${IOS_SDK} -L${LIBDIR} -L${IOS_SDK}/usr/lib -arch ${ARCH} -miphoneos-version-min=7.0
arch: ${LIBDIR}/libspatialite.a
${LIBDIR}/libspatialite.a: ${LIBDIR}/libproj.a ${LIBDIR}/libgeos.a ${LIBDIR}/libsqlite3.a ${CURDIR}/spatialite
cd spatialite && env \
CXX=${CXX} \
CC=${CC} \
CFLAGS="${CFLAGS} -Wno-error=implicit-function-declaration" \
CXXFLAGS="${CXXFLAGS} -Wno-error=implicit-function-declaration" \
LDFLAGS="${LDFLAGS} -liconv -lgeos -lgeos_c -lc++" ./configure --host=${HOST} --disable-freexl --prefix=${PREFIX} --with-geosconfig=${BINDIR}/geos-config --disable-shared && make clean install-strip
clean:
rm -rf build geos proj spatialite sqlite3 include lib
@ GAGAN-IOS,@克里斯蒂娜 - 布鲁克斯 - 这似乎Makefile文件spatialite目录内得到自动从上面Makefile.I产生我不知道我是怎么可以控制lib,动态地包含到libxml2的路径。
EDIT2 的调查显示还有一个层面,i386和x86_64的,并没有对ARMv7,armv7s和arm64
${MAKE} arch ARCH=armv7 IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin ${MAKE} arch ARCH=armv7s IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin ${MAKE} arch ARCH=arm64 IOS_PLATFORM=iPhoneOS HOST=arm-apple-darwin ${MAKE} arch ARCH=i386 IOS_PLATFORM=iPhoneSimulator HOST=i386-apple-darwin ${MAKE} arch ARCH=x86_64 IOS_PLATFORM=iPhoneSimulator HOST=x86_64-apple-darwin
整合检查并按照SDK文档中的建议添加其他链接标志。 –