手头上有几个开源的 c++ static lib,用 cmake 编译出来是 for intel 的,怎样才能编译成 for arm 的呢,求指点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
forkon
V2EX    C

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

  •  
  •   forkon 2015 年 5 月 22 日 1809 次点击
    这是一个创建于 3893 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    主要看这几个选项。

    CMAKE_C_COMPILER
    CMAKE_CXX_COMPILER
    CMAKE_C_FLAGS
    CMAKE_CXX_FLAGS
    lijianying10
        8
    lijianying10  
       2015 年 5 月 23 日   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 年 5 月 23 日
    @lijianying10 你的回答很高深对于我这个cmke小白来说……我现在在做librime(一个很棒的开源输入法引擎)的移植工作,想将它弄到ios上去……如你所说的,我现在确实不知道问题到底有多复杂,移植工程到底有多大 ,不过可以肯定类似的工作还没人做过。我只知道我现在很想将它移植过去!

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

    你的坐标是哪里的,如果你在上海的话,我想当面请教。
    typcn
        10
    typcn  
       2015 年 5 月 23 日
    直接丢进 XCode 项目,使用鼠标拖拽。。。。。。。。。。。。。。。。。。
    typcn
        11
    typcn  
       2015 年 5 月 23 日
    非要手动编译也行,很简单,苹果提供了 [完整的工具链]

    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 年 5 月 23 日
    @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
       
    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     Solana     1566 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:35 PVG 00:35 LAX 08:35 JFK 11:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86