MacOS下cmake解决找不到链接库的问题

    2021/05/12 16:41 下午 标签: #编程

    最近尝试在MacOS上跑代码, 为此安装了GMP库, 但是发现cmake后再运行make会出现如下错误:

    ld: library not found for -lgmp
    

    这个错误在MacOS上常见为以下形式:

    ld: library not found for -lxxx
    

    因为MacOS系统自身的机制, 只能通过brew来安装这些第三方库, 通常可以通过

    brew link --overwrite xxx
    

    创建软链接的方式来解决, 但是有时候安装完系统还是找不到, 推测是因为该第三方库不包含Findxxx.cmake文件, 此外MacOS默认不会在/usr/local/opt目录下查找第三方库文件, 因而产生了这个错误. 于是开始了解决错误之旅. 找了很多资料, 一般是要求我们在.bashrc或者.zshrc(取决于喜欢的shell类型)中添加路径, 第三方库的头文件和库的路径一般在/usr/local/opt/xxx/include/usr/local/opt/xxx/lib下, 完整代码如下:

    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/opt/xxx/lib"
    export LIBRARY_PATH="$LIBRARY_PATH:/usr/local/opt/xxx/lib"
    

    然后source ~/.zshrc, 再次编译运行, 问题解决.

    那么有不修改.zshrc文件的办法吗? 经摸索发现, 只需要在CMakeLists.txt中插入如下代码:

    LINK_DIRECTORIES("/usr/local/opt/xxx/lib")
    

    再次编译即可解决, 但是下次其他项目要用的时候都需要在CMakeLists.txt中配置一次.