架构i386的未定义符号:libcurl

时间:2014-08-25 06:18:07

标签: ios xcode cocos2d-x i386 ios-frameworks

当我整合libcurl时,遇到以下问题  架构i386的未定义符号:

 "_SSLClose", referenced from:
  _Curl_darwinssl_close in libcurl.a(libcurl_la-curl_darwinssl.o)
"_SSLCopyPeerTrust", referenced from:
  _darwinssl_connect_common in libcurl.a(libcurl_la-curl_darwinssl.o)
"_SSLCreateContext", referenced from:
  _darwinssl_connect_common in libcurl.a(libcurl_la-curl_darwinssl.o)
  _darwinssl_connect_common in libcurl.a(libcurl_la-curl_darwinssl.o)
  _Curl_darwinssl_close in libcurl.a(libcurl_la-curl_darwinssl.o)
"_SSLGetBufferedReadSize", referenced from:

4 个答案:

答案 0 :(得分:0)

您添加的libcurl.a静态库适用于设备。您正在尝试为模拟器构建应用程序(i386适用于Mac)。更改您的libcurl.a或构建您的Device应用程序可以解决您的问题。

答案 1 :(得分:0)

我曾经用另一个库运行这个问题。问题是模拟器在x86处理器上运行而实际设备在ARM上运行,实际上你需要在项目中使用两个独立的库构建。一个用于模拟器,一个用于ARM。如果您的目标是ARM-64,那么您也需要构建它。

答案 2 :(得分:0)

在您的运行脚本中替换它...希望这将解决

定义输出文件夹环境变量

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

步骤1.构建设备和模拟器版本

xcodebuild -target GEOAuthAuthentication ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

xcodebuild -target GEOAuthAuthentication -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

xcodebuild -target GEOAuthAuthentication -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" TARGET_BUILD_DIR="./build-x86_64"

确保输出目录存在

mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

步骤2.使用lipo

创建通用二进制文件
lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" "./build-x86_64/lib${PROJECT_NAME}.a"

最后的触摸。复制头文件。为方便起见

cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"

答案 3 :(得分:0)

签入您的目标 - >构建阶段 - > Link Binary With Libraries是所有必需的框架和库添加