V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
forkon
V2EX  ›  C

手头上有几个开源的 c++ static lib,用 cmake 编译出来是 for intel 的,怎样才能编译成 for arm 的呢,求指点

  •  
  •   forkon · 2015-05-22 14:10:46 +08:00 · 1423 次点击
    这是一个创建于 3502 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我没做过这方面的工作,表述得不够专业,别笑哈。手头上这几个c++ lib原本是用在os x上面,由于项目需要现要把它移植到ios上用,想知道是直接修改编译选项就成(但愿如此),还是需要修改代码,求指点。

    13 条回复    2015-05-23 19:31:06 +08:00
    Septembers
        1
    Septembers  
       2015-05-22 16:17:49 +08:00
    xylophone21
        2
    xylophone21  
       2015-05-22 17:41:50 +08:00
    这取决于你这个lib的依赖,如果它们依赖了os x上的专有接口,你指望能不修改源码?(除非开源项目已经写好了这些差异) 反之,如果它们仅依赖了stdc,posix等一些跨平台的库,那么修改编译选项还是有戏的。
    forkon
        3
    forkon  
    OP
       2015-05-22 17:57:53 +08:00
    @xylophone21 我手头上这几个c++ lib都是跨平台的,没有依赖os x上的专有接口,我想知道要对makefile文件作些什么修改才能达到目的呢,谢谢:)
    forkon
        4
    forkon  
    OP
       2015-05-22 17:58:34 +08:00
    @Septembers 好,这个我先看看,谢谢:)
    xylophone21
        5
    xylophone21  
       2015-05-22 19:18:06 +08:00
    @forkon 开源库用的什么makefile系统?

    如果是CMAKE
    @Septembers
    说的是对的,主要看CMAKE_C_COMPILER等几个选项

    如果是直接的makefile,看看有没有类似CC之类的变量

    本质上说就是换一个gcc,然后与之配合的是一些flag,头文件,库文件的搜索路径。
    forkon
        6
    forkon  
    OP
       2015-05-22 19:29:20 +08:00 via iPhone
    @xylophone21 用的是cmake……有没有好的学习cmake的资料可看呢,中文的最好
    xylophone21
        7
    xylophone21  
       2015-05-22 19:46:05 +08:00
    @forkon 这个真没有找过,英文资料还比较好理解吧

    主要看这几个选项。

    CMAKE_C_COMPILER
    CMAKE_CXX_COMPILER
    CMAKE_C_FLAGS
    CMAKE_CXX_FLAGS
    lijianying10
        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. 是否有类似的工作已经做出来了
    等等值得思考的事。

    希望能对楼主有所帮助
    forkon
        9
    forkon  
    OP
       2015-05-23 00:31:21 +08:00
    @lijianying10 你的回答很高深对于我这个cmke小白来说……我现在在做librime(一个很棒的开源输入法引擎)的移植工作,想将它弄到ios上去……如你所说的,我现在确实不知道问题到底有多复杂,移植工程到底有多大 ,不过可以肯定类似的工作还没人做过。我只知道我现在很想将它移植过去!

    需要重新编译的lib有下面这些:
    glog
    gtest
    leveldb
    marisa-trie
    opencc
    yaml-cpp

    你的坐标是哪里的,如果你在上海的话,我想当面请教。
    typcn
        10
    typcn  
       2015-05-23 01:27:32 +08:00
    直接丢进 XCode 项目,使用鼠标拖拽。。。。。。。。。。。。。。。。。。
    typcn
        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
    forkon
        12
    forkon  
    OP
       2015-05-23 15:50:18 +08:00
    @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.

    你知道怎么解决吗
    forkon
        13
    forkon  
    OP
       2015-05-23 19:31:06 +08:00
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   916 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:41 · PVG 03:41 · LAX 11:41 · JFK 14:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.