导航:首页 > 源码编译 > 编译器是如何连接库的

编译器是如何连接库的

发布时间:2024-06-12 11:08:03

❶ 关于linux下连接动态库问题

gcc编译时,当使用动态库编译可以按照几种写法
1.gcc test.c ./libSDL2-2.so
2.gcc test.c -lSDL2-2
3.gcc test.c -L/home/test -lSDL2-2
一般的编译参数都是按照2或3去写
2写法的含义是从/lib或者/usr/lib目录下寻找名称为SDL2-2的库,即寻找/lib/libSDL2-2.so或者/usr/lib/libSDL2-2.so文件进行链接,当然如果没有动态库就会去找静态库,再没有应该就会在编译时报错
3写法的含义是从-L参数首先从指定的目录中寻找需要链接的库文件,随后再去寻找系统文件夹中是否存在需要的库
1写法的含义是将当前目录下的./libSDL2-2.so.0文件链接进最终文件,因此执行readelf -a a.out后在动态库部分所看到的路径就是./libSDL2-2.so.0,进而在执行文件时仅会从当前目录下寻找libSDL2-2.so.0文件,当执行文件时所在的目录下没有该文件时就会出现找不到库文件的操作

你第二次操作时,因为function.so库文件与a.out文件在同一个目录,同时也是在该目录下执行的ldd操作及运行a.out,a.out在加载动态库时从当前目录下找到了所需要的库文件,此时能够执行成功(ldd命令实质是一个脚本,通过设置环境变量运行动态库链接器来输出所有待链接的动态库)。
你可以试试将a.out拷贝至其他目录再次运行,将出现和第一次操作时一样的现象,找不到function.so文件。

具体的解决方法就是修改编译参数,将./libSDL2-2.so.0修改为-lSDL2-2并将libSDL2-2.so.0文件拷贝至/usr/lib目录下,并且可能因为没有修改链接器的缓存文件(将可能找不到带版本号后缀的动态库),需要在/usr/lib目录下建立一个文件连接(ln -s libSDL2-2.so.0 libSDL2-2.so)或者直接修改名称为libSDL2-2.so

❷ 怎么使用java连接数据库

1、加载驱动程序。

处理结果两种情况:

1、执行更新返回的是本次操作影响到的记录数。

2、执行查询返回的结果是一个ResultSet对象。

ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些 行中数据的访问。

(2)编译器是如何连接库的扩展阅读:


Statement

要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3 种类型:

1、执行静态SQL语句。通常通过Statement实例实现。

2、执行动态SQL语句。通常通过PreparedStatement实例实现。

3、执行数据库存储过程。通常通过CallableStatement实例实现。

❸ 在VS2010的VC++中如何编译、链接、运行、调试程序

在vc2010中看不到像VC6.0显式的编译、连接按钮了。只有工具栏(启动调试)和菜单栏(测试)

这些功能包含编译、链接、运行(调试)所有步骤,都一键完成。

实际上这些功能是编译器使用以下工具实现的:

编译器CL.EXE,将.c/.cpp源代码编译成目标代码.obj,

连接器LINK.EXE,将目标代码和库连接生成最终文件;

资源编译器RC.EXE(.rc)将资源编译,最终通过连接器存入最终文件.

注意编译准备:VCVARS32.bat拷贝到当前的workspace下在cmd下执行之后就可以

直接使用这些编译工具在cmd下编译.

-----------------------------------------------------------

例子:记事本编辑hello.c,在按照上面要求拷贝到当前目录下,打开cmd

CL.EXE /c hello.c只编译不连接

LINK.EXE hello.obj 用到的库文件,生成可执行文件.如:

LINK.EXE hello.obj user32.lib

RC.EXE Hello.rc

-----------------------------------------

CL.EXE,LINK.EXE,vcvars32.bat所在目录:假定VS2010使用默认安装路径

C:Program FilesMicrosoft Visual Studio 10.0VCin

rc.exe所在路径:

C:Program FilesMicrosoft SDKsWindowsv7.1ABin

注意:

(1)这些EXE文件在vs2010下可能存在多个不同路径,但都是一样的,可以通用

(2)如果电脑上安装了不同的VS版本,这些文件会不同,注意区分。使用同一VS版本下的文件。

❹ C/C++编译器如何通过头文件链接到对应的库文件

把自己的头文件存为*.h文件名。然后在要调用该头文件的程序开头用
#include
<*.h>如果你指的是包含一个你编译器没有的第三方头文件的话,那么首先检查该头文件代码是否被编译器支持,如果支持的话使用#include包含她就可以了。

❺ Linux下编译程序,如何同时连接两个库文件,gcc命令应该怎么写。

-L后的应该是路径,本例应该是-L/usr/lib/,-l后应该是库的名字,注意,这里库的名字是吧库"libapi.so"去掉前面的"lib"和后面的".so",应该是-lapi.而且一个-L和-l对应一个库.所以你的应该改为:
gcc -g -o test.exe test.c -L/usr/lib/ -lapi -L/usr/lib/ -lpk11.
还有,.exe文件是windows下的可执行文件格式,linux下不这么用,但是就本例而言也能运行.

❻ c语言里面的编译和链接是怎么回事啊

C/C++语言的完整编译过程是

一、预编译

处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。

二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。

三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。

阅读全文

与编译器是如何连接库的相关的资料

热点内容
程序员的基本功 浏览:519
遗传算法排班 浏览:286
如何加密金融安全网 浏览:27
家里的wifi太卡了怎么样自己加密 浏览:230
华为链路聚合命令 浏览:423
apache自动运行php 浏览:516
485和单片机 浏览:974
xp修复系统命令 浏览:519
微你app怎么加好友 浏览:795
程序员转正 浏览:208
应用隐私加密忘记密码怎么办 浏览:683
2g视频怎么压缩 浏览:609
康佳电视服务器异常怎么解决 浏览:840
怎么用c语言编译简单的小游戏 浏览:814
服务器如何以域用户登录 浏览:602
安卓os14怎么默认桌面 浏览:551
应用市场下载在哪个文件夹 浏览:897
安卓上的谷歌地图怎么用 浏览:183
安卓命令行打包 浏览:518
编程文字与数字教学视频 浏览:818