关于代码编译连接的细节问题

问题描述

关于代码编译连接的细节问题

在终端通过pkg-config --libs gtk+-2.0命令获得代码做连接动作时gtk库的搜索路径如下:

 -L/usr/local/arm-linux/arm-linux/lib -L/usr/local/arm-linux/lib -L/usr/local/arm-linux//lib -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lX11

例如第一个路径-L/usr/local/arm-linux/arm-linux/lib下有N多动态/静态库文件如下图:

问题来了:
1.编译器确切地知道哪个库文件中会有需要的接口函数吗?
2.如果它知道,是怎样知道的?
3.如果编译器不知道,那么它是在该路径下挨个库文件打开搜索吗?这样不会慢成马吗?

解决方案

不知道,需要头文件来指示。头文件包含对静态库中函数原型的定义。

解决方案二:

不会,它会指明对应的静态库的目标文件,链接器会根据符号去定位的。

解决方案三:

多个版本会有版本控制,寻找兼容的版本。

时间: 2024-10-30 10:05:46

关于代码编译连接的细节问题的相关文章

代码-预编译连接符##  预处理指令

问题描述 预编译连接符## 预处理指令 #include <stdio.h> #include<stdlib.h> #define TR(m,n,p) m##n##p int main () { printf("%sn",TR("abc","xy","yz")); return 0; } 这段代码为什么编译不过? 解决方案 gcc?那好像要定义2个宏,可以看看这个解释http://www.cnblogs

symbol-VC6.0 DLL 编译连接问题

问题描述 VC6.0 DLL 编译连接问题 VC6.0写好的dll,本来是没问题的,今天连接突然报error LNK2001: unresolved external symbol _SCardListReadersA,有点莫名其妙... 解决方案 rebuild一下工程试试还有检查一下工程设置,是不是依赖的lib库文件改动了 解决方案二: 首先,查一下未定义的标识 _SCardListReadersA 或 _SCardListReaders 的定义是否存在?是否无意中修改了代码或工程配置?其次

qt-用QT写了一个0槽和信号相关的代码,代码编译成功,但是槽函数始终接收不到信号,

问题描述 用QT写了一个0槽和信号相关的代码,代码编译成功,但是槽函数始终接收不到信号, 先看main.cpp文件: 就是定义一个线程 int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); /*定义一个线程,并且启动一个线程*/ MyThread receive_data; receive_data.start(); return a.exec(); } 然后在mainwind

opengl es3.0样板代码编译错误

问题描述 opengl es3.0样板代码编译错误 解决方案 已解决,是libEGL.dll问题 解决方案二: 看起来好像是没有连接lib库

编程语言-求大神!VS2013下写了个电话本,编译连接都可以就是运行时会挂!

问题描述 求大神!VS2013下写了个电话本,编译连接都可以就是运行时会挂! 这是函数代码 void add_peo(Pcon pcon) { if (pcon->count <= MAX_PEO) { printf("请输入姓名:"); scanf_s("%s", pcon->nb[pcon->count].name); printf("请输入年龄:"); scanf_s("%d", &pco

如何将内核静态库编译连接到驱动程序中去【转】

转自:http://blog.csdn.net/ganjianfeng2003/article/details/8089551 如何将内核静态库编译连接到驱动程序中去 2010-12-07 08:27 331人阅读 评论(1) 收藏 举报 http://blog.chinaunix.net/u2/61663/showart_2404744.html     刚上邮箱的时候发现一位网友向我询问这个问题,同时发送了一个链接给我了. 上去一看,上面还留有我以前同样的提问,看看时间,都几年前在别人的帖子

JAVA代码编译出错:找不到符号,求解答

问题描述 JAVA代码编译出错:找不到符号,求解答 源代码: package com.tarena.shoot; import java.util.Random; //Airplane----敌机既是飞行物, public class Airplane extends FlyingObject implements Enemy{ private int speed = 2;//敌机走步的步数 public Airplane(){ image = ShootGame.airplane; width

.NET下的动态代码编译探索

编译|动态 不能确定动态代码编译在什么地方是有意义的?一个普通情况就应该可以帮助阐明这个问题.假如你不得不从一个数据库中取出数据并将它放入另一个数据库.你应该只需使用一个SQL语句从源数据库中选取数据并插入目标数据库中,这只是小菜一碟,对不对?如果你正在拷贝生产数据以生成测试数据并需要改变数据以确保目标数据在以后开发中使用是安全的又将如何?你可能会构建一个数据传输系统(DTS)或某个其它传输机制,但是如果你这样做超过足够多的数据,这就会变成你每次为拷贝数据建立数据-擦除(data-scrubbi

ASP.NET Whidbey 中新的代码编译功能

asp.net|编译 ASP.NET Whidbey 中新的代码编译功能G. Andrew DuthieGraymad Enterprises, Inc. 2003 年 10 月 摘要:了解如何利用 ASP.NET Whidbey 更轻松地使用代码.Code 目录会自动为您的站点编译代码,而预编译会使部署工作更容易. 下载本文的源代码.(请注意,在示例文件中,程序员的注释使用的是英文,本文中将其译为中文是为了便于读者理解.) 目录简介新的模块化代码模型\Code 目录利息计算器预编译支持在位预编