如何在 Mac 上正确设置 GSL 路径
How to correctly set GSL path on mac
我已经在 mac 10.13.2 上"正确"安装了 gsl。 在我的 c++ 程序中,我像往常一样调用,例如:
#include <gsl/gsl_math.h>
但是在运行代码时,它找不到 gsl。
fatal error: 'gsl/gsl_math.h' file not found
我想知道如何正确链接 gsl PATH 和库。 我试过了,
- 在.bash_profile中设置 PATH 和 LD_LIBRARY_PATH
- 将PKG_CONFIG_PATH设置为 .../Gsl2.3/lib/pkgconfig
$which GSL 配置返回
/Users/gkdgoutam/Softwares/HEP_Softwares/Install/Gsl2.3/bin/gsl-config
$pkg-config --libs gsl 返回
-L/Users/gkdgoutam/Softwares/HEP_Softwares/Install/Gsl2.3/lib -lgsl -lgslcblas -lm
我能找到的唯一解决方案是每次都使用 gsl 链接运行。 喜欢:
g++ $(gsl-config --cflags) mycode.cc $(gsl-config --libs) && ./a.out
但我想知道是否可以全局设置 GSL 路径,以便我可以简单地运行
g++ mycode.cc && ./a.out
这是 c++ 代码的编译和构建方式:
编译
单元将获取每个 cpp 文件并遍历包含的标头,以查找代码中所用功能的符号签名实现的前向声明。在您的情况下,这涉及gsl/gsl.h
。如果在搜索目录中找不到该文件,则可以通过指定C_INCLUDE_PATH
和/或CPLUS_INCLUDE_PATH
来展开该目录。如果省略#include <gsl/gsl_math.h>
,则代码将无法编译,因为存在签名,而对于您使用的GSL函数,找不到签名。
链接
编译完所有cpp/cc
文件后,您需要链接可以执行的二进制文件。链接过程包括搜索.o/.obj...
文件中的所有符号,以及与目标文件和库中可以找到的符号(例如使用-lgsl
指定的符号)进行匹配。如果一切顺利,每次查找都会为您的机器硬件型号(即 64 位/32 位...、Arm、英特尔、...等)。如果未找到某些,您会发现链接错误。
你要问的是,有没有办法C++不能像上面那样工作?不!
如果您遗漏#include <gsl/gsl.h>
或者在搜索路径中找不到所述文件,则编译将不起作用。如果省略-lgsl
,链接将失败。如果您觉得在命令行中编写上述所有内容很烦人,请编写一个Makefile
将构建过程简化为理想的简单命令:make
。
不要忘记,如果您要链接到GSL的共享库版本,则可能需要在Linux上指定LD_LIBARAY_PATH,在Mac上指定DYLD_LIBRARY_PATH。
TLDR:您不能要求C ++编译器/链接器按照设计以不同的方式工作。
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++/Linux中设置单调时钟的一些技巧
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 嵌套在类中时无法设置成员数据
- 需要帮助设置在C++中使用的Potrace
- 如何在自删除后将对象设置为nullptr
- 将指针设置为"nullptr"并不能防止双重删除?
- 如何在Ubuntu中使用cmake设置qt4
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 如何在boost beast http请求中设置http头
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如何在24位SDL_Surface上设置像素的颜色
- std::设置自定义比较器
- 如何设置一个范围来提取我想要获得的信息
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- 如何在 Mac 上正确设置 GSL 路径
- 使用 cmake 设置 gsl 时出现问题