gcc编译器的链接、装载问题

gcc是一款Linux系统上普遍使用的轻便型代码编译工具,在bash shell下通过命令行操作可完成程序代码的编译、汇编、链接工作。
gcc基本编译指令格式如下:

gcc -o executefile sourcefile.c -L<库文件路径> -l<动态库名字> -I<头文件路径> 

编译时,gcc按照从右向左的顺序加载指定的文件,因此依赖项(如头文件、库文件等)必须置于源文件右侧,否则会出现类似于:undefined reference to ×××函数 的错误。
上述命令由一系列代码模块生成可执行文件executefile,./executefile即可执行程序,但由于使用了动态链接库,在各模块链接的过程中,动态库(.so)实际上并没有整合进executefile,此后执行程序有可能会找不到需要实时加载的动态库路径而失败。一种解决方案是,执行之前临时添加环境变量路径:

export LD_LIBRARY_PATH=<库文件路径>

此设置在系统重启后失效。
另一种方法是在/etc/ld.so.config.d目录下创建新文件usr-libs.conf,写入lib路径:/home,然后使用命令/sbin/ldconfig更新配置即可。
特别指出,gcc编译器首先从源文件所在的目录下寻找各模块代码,若程序员将所有需要的文件都放在同一目录下,则不存在上述问题,只需按依赖关系列出各模块文件名即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章