Cha*_*Lam 1 c c++ compilation header-files libraries
这可能看起来有点愚蠢:)但它一直困扰着一段时间.当我在C++/C程序中包含一些由其他人编写的头文件时,编译器如何知道头文件中声明的类成员函数的实现在哪里?
假设我想编写一些利用OpenCV库的程序.通常我会想要使用:
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
Run Code Online (Sandbox Code Playgroud)
但是,这些只是头文件,据我所知,它只声明函数但没有实现.然后编译器如何知道在哪里找到实现?特别是当我想构建一个.so文件时.
有一个类似的帖子.基本上它说第三方库,尤其是 商业产品不发布源代码,因此他们将lib文件与头文件一起发送.但是,它没有说明编译器如何知道在哪里找到lib文件.另外,那个帖子中的答案提到如果我想编译自己的代码,我需要执行这些头文件的源代码.这是否意味着我无法在没有实现源的情况下构建.so文件?
通常,实现以预编译库的形式分发.您需要告诉编译器它们的位置.
例如,对于gcc,引用在线手册
Run Code Online (Sandbox Code Playgroud)-llibrary -l library链接时搜索名为library的库.[...]
和,
Run Code Online (Sandbox Code Playgroud)-Ldir将目录dir添加到要搜索的目录列表中
-l.
注意:您不需要显式指定标准库,它们会自动链接.相反,如果您不希望它们与二进制文件链接,则需要通过传递-nostdlib选项来通知编译器.
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |