IDE如何从头文件.h中找到共享库名.so ?
How does the IDE to find the shared library name .so from the header file .h
我想知道IDE/编译器/链接器是否有方法从头文件名中识别共享对象文件名(lib* so)。
我使用eclipse CDT,我像每个人一样包含stdio和其他库,但是对于一些奇怪的库,我必须告诉IDE库的名称和路径。:
#include "opencv2/core/core.hpp"
我必须告诉链接器使用库opencv_core (IDE为链接器生成-lopencv_core参数,因此它查找libopencv_core.so)。
如何从库名中获取库文件名非常清楚。我不知道如何从头文件中得到它。
我无法在stackoverflow或其他任何地方找到这个问题的答案,所以我怀疑头文件名和库文件名之间没有关系。
你的怀疑完全正确。给定某个头文件,在这个头文件中没有什么不可见或隐藏的东西告诉编译器"嘿,我的库在那里!"至少c++标准中没有。单独的c++实现可以自由地做任何他们想做的事情,并且可能有类似的东西。但就c++标准而言,答案是否定的。
就您的链接器而言,它取决于每个c++实现或操作系统。在某些情况下,链接器有一个默认的目录列表,它搜索要链接的库,标准的c++库就在那里。
在其他情况下,链接器不会被直接调用,而是由编译器调用。这就是gcc
的情况。使用gcc的典型链接操作将在
g++ -o prg module1.o module2.o
gcc知道它的库在哪里。它调用链接器,通常是ld
,并提供c++标准库的位置,以及要链接在一起的模块。
相关文章:
- 加载共享库时C++错误:libopencv_ximgproc.so.4.4
- 用于构建 cuda .so 文件(共享库)的生成文件
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 如何使用 cmake 在代码中包含、构建和调试共享库 (.so)?
- c++ 链接器错误"针对'.rodata.str1.1'的重新定位R_X86_64_32"链接 CXX 共享库 libsrt.so
- 如何为包含 protobuf 库的C++程序生成共享库 (.so) 文件
- 加载共享库时出错:libbsoncxx.so._noabi:无法打开共享对象文件:没有此类文件或目录
- 卸载共享对象(.so 文件)在 C++ 中用 dlopen() 打开
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- C++ - 未找到共享库 liblog4cpp.so.4
- 我可以在Embarcadero C 建造者中为Android(*.so)构建共享库
- 为什么某些共享库以D.So而不是.so结束
- 加载共享库时出现"错误:libSDL2_mixer-2.0.so.0:无法打开共享对象文件:没有这样的文件或目录
- 启动程序和libocci.so.11.1:无法打开共享对象文件:没有这样的文件或目录
- 从 C 调用共享 .so 中的函数
- clang链接.so库libc _共享
- libcudart.so.7.5:无法打开共享对象文件:没有这样的文件或目录
- libisl.so.13:无法打开共享对象文件:没有这样的文件或目录
- 将静态 (.a) 库与共享 (.so) 库链接,得到错误"relocation R_X86_64_32S against a local symbol; recompile with -fPIC"