我没做过这方面的工作,表述得不够专业,别笑哈。手头上这几个c++ lib原本是用在os x上面,由于项目需要现要把它移植到ios上用,想知道是直接修改编译选项就成(但愿如此),还是需要修改代码,求指点。
1
Septembers 2015-05-22 16:17:49 +08:00
|
2
xylophone21 2015-05-22 17:41:50 +08:00
这取决于你这个lib的依赖,如果它们依赖了os x上的专有接口,你指望能不修改源码?(除非开源项目已经写好了这些差异) 反之,如果它们仅依赖了stdc,posix等一些跨平台的库,那么修改编译选项还是有戏的。
|
3
forkon OP @xylophone21 我手头上这几个c++ lib都是跨平台的,没有依赖os x上的专有接口,我想知道要对makefile文件作些什么修改才能达到目的呢,谢谢:)
|
4
forkon OP @Septembers 好,这个我先看看,谢谢:)
|
5
xylophone21 2015-05-22 19:18:06 +08:00
@forkon 开源库用的什么makefile系统?
如果是CMAKE @Septembers 说的是对的,主要看CMAKE_C_COMPILER等几个选项 如果是直接的makefile,看看有没有类似CC之类的变量 本质上说就是换一个gcc,然后与之配合的是一些flag,头文件,库文件的搜索路径。 |
6
forkon OP @xylophone21 用的是cmake……有没有好的学习cmake的资料可看呢,中文的最好
|
7
xylophone21 2015-05-22 19:46:05 +08:00
|
8
lijianying10 2015-05-23 00:08:28 +08:00 1
1. 其实您遇到的最大的问题不在于构建系统CMake上,因为这些资料都非常好整理。
2. Intel Compiler提供了针对不同CPU的优化,比如说AVX指令集之类的。如果遇到类似OpenMP一类的只涉及到预编译头的还好可以直接过去。如果遇到类似`__m512`之类的针对Intel独家CPU的结构体那就麻烦了,虽然概率不大。 3. 看依赖,我之前用过Intel Cluster Studio 不知道您说的lib是否依赖MKL或者IPP(支持android&ios)之类的,需要参照intel说明书,或者您应该到Intel Dev Zone 去提问。 基于以上的建议: 您目前着手的工作应该快速scan code。 必要的时候hack code去了解您需要的代码。 不然始终都是抓瞎。 慢慢了解了之后可以了解几个问题: 1. 问题到底有多复杂 2. 移植工程到底有多大 3. 是否有类似的工作已经做出来了 等等值得思考的事。 希望能对楼主有所帮助 |
9
forkon OP @lijianying10 你的回答很高深对于我这个cmke小白来说……我现在在做librime(一个很棒的开源输入法引擎)的移植工作,想将它弄到ios上去……如你所说的,我现在确实不知道问题到底有多复杂,移植工程到底有多大 ,不过可以肯定类似的工作还没人做过。我只知道我现在很想将它移植过去!
需要重新编译的lib有下面这些: glog gtest leveldb marisa-trie opencc yaml-cpp 你的坐标是哪里的,如果你在上海的话,我想当面请教。 |
10
typcn 2015-05-23 01:27:32 +08:00
直接丢进 XCode 项目,使用鼠标拖拽。。。。。。。。。。。。。。。。。。
|
11
typcn 2015-05-23 01:34:21 +08:00
非要手动编译也行,很简单,苹果提供了 [完整的工具链]
PATH=`xcodebuild -version -sdk iphoneos PlatformPath`"/Developer/usr/bin:$PATH" SDK=`xcodebuild -version -sdk iphoneos Path` CXX="xcrun --sdk iphoneos clang++ -arch $arch -miphoneos-version-min=7.0 --sysroot=$SDK -isystem $SDK/usr/include" LDFLAGS="-Wl,-syslibroot,$SDK" 多来几次,arch 分别为 armv7 armv7s arm64 如果要在模拟器用,iphoneos 改成 iphonesimulator ,arch 分别为 i386 x86_64 |
12
forkon OP @typcn 兄台再多说一点呗,有没有例子可以看一下呢?
在github上找了个工具ios-cmake,跑起来报这样的错: CMake Error at CMakeLists.txt:3 (project): The CMAKE_CXX_COMPILER: clang++ is not a full path and was not found in the PATH. Tell CMake where to find the compiler by setting either the environment variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path to the compiler, or to the compiler name if it is in the PATH. 你知道怎么解决吗 |
13
forkon OP ios-cmake出现的Error: clang/clang++ is not a full path and was not found in the PATH.已经解决了
详见: https://github.com/ForDrink/ios-cmake/commit/385db495abd1a8fc32ab9597fb9a1306aacc3f3d |