奇思妙想 · 2024年 4月 21日 0

构建无比简洁的clang编译ObjC环境

29 次浏览

编译ObjC代码的更简洁方法有提到,可以用更简洁的命令行在Ubuntu 22.04下编译ObjC环境,其实还可以更简洁,如下我们将构造一个clang-objc软链接,可以直接使用clang-objc demo.m编译。

  • 为了避免和平台已有clang命令冲突,我们先复制一个clang可执行档,命名为clang-objc.
    sudo cp /usr/lib/llvm-14/bin/clang /usr/lib/llvm-14/bin/clang-objc
  • 在/usr/bin目录构造clang-objc的软链接
    sudo ln -s /usr/lib/llvm-14/bin/clang-objc /usr/bin/clang-objc
  • 利用alias命令进一步精简clang-objc
    alias clang-objc='clang-objc -I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` -L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` -lgnustep-base -lobjc -I /usr/lib/gcc/x86_64-linux-gnu/11/include -fconstant-string-class=NSConstantString'

OK, 可以用clang-objc demo.m编译你的文件了。

注意事项

  • clang编译ObjC,依然需要链接libobjc,如果有升级软件gcc,可能出现clang找不到libobjc, 需要在编译选项中单独添加链接库路径,例如:
    libobjc位于/usr/lib/gcc/x86_64-linux-gnu/11/libobjc.so
    需要增加选项:-L /usr/lib/gcc/x86_64-linux-gnu/11