当前位置: 技术问答>linux和unix
网易面试遇到的两个linux编程的难题
来源: 互联网 发布时间:2016-05-07
本文导语: 请教: 1、如果工程中只有.h文件改动,如何只编译需要编译的文件?makefile如何实现。 2、linux下,程序开始运行,若缺少动态库,会提示缺少什么库的信息,这个是如何实现? | 1. 主要就是要确立.c ...
请教:
1、如果工程中只有.h文件改动,如何只编译需要编译的文件?makefile如何实现。
2、linux下,程序开始运行,若缺少动态库,会提示缺少什么库的信息,这个是如何实现?
1、如果工程中只有.h文件改动,如何只编译需要编译的文件?makefile如何实现。
2、linux下,程序开始运行,若缺少动态库,会提示缺少什么库的信息,这个是如何实现?
|
1. 主要就是要确立.c 和.h文件的依赖关系! 如果没有这个依赖关系,修改.h之后,包含该.h文件的.c是不会被编译的(除非你make clean);
简单地,参考3楼的方法;
2. 缺少动态库的话,运行程序会提示如下信息: "当加载动态库libxxx.so的时候发生错误:原因是没有找到该动态库,不能打开";
"error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory"
这个如何实现,主要是依赖于linux系统的加载器(ld.so, ld-linux.so*,详情可以man ld.so查看),加载器在加载一个程序运行的时候,
会根据可执行程序里面的库信息,将所有的动态库先加载进入内存,如果找不到该动态库,那么就会打印上面的信息(这句信息是由ld.so,或者
ld-linux.so*加载器打印出来的);
good luck!
简单地,参考3楼的方法;
2. 缺少动态库的话,运行程序会提示如下信息: "当加载动态库libxxx.so的时候发生错误:原因是没有找到该动态库,不能打开";
"error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory"
这个如何实现,主要是依赖于linux系统的加载器(ld.so, ld-linux.so*,详情可以man ld.so查看),加载器在加载一个程序运行的时候,
会根据可执行程序里面的库信息,将所有的动态库先加载进入内存,如果找不到该动态库,那么就会打印上面的信息(这句信息是由ld.so,或者
ld-linux.so*加载器打印出来的);
good luck!
|
1、如3楼所说,加.h的头文件依赖
2、用动态库函数进行搜索如下路径
LD_LIBRARY_PATH 指定的路径
/etc/ld.so.conf 文件指定的路径
/lib
/usr/lib
如果找不到,就报错
GNU 动态库函数
dlopen() //如果为空就表示出错,并打印出
因为目前linux上的可执行文件都是ELF格式的文件,ELF文件由一个ELF文件信息头和很多节构成 ,找出里面的动态库节,里面有该可执行文件依赖的动态库文件,再用上方法去解析
还可以再程序中用system()函数执行
readelf -d 可执行文件 | grep .*.so文件查看其依赖的动态库
2、用动态库函数进行搜索如下路径
LD_LIBRARY_PATH 指定的路径
/etc/ld.so.conf 文件指定的路径
/lib
/usr/lib
如果找不到,就报错
GNU 动态库函数
dlopen() //如果为空就表示出错,并打印出
因为目前linux上的可执行文件都是ELF格式的文件,ELF文件由一个ELF文件信息头和很多节构成 ,找出里面的动态库节,里面有该可执行文件依赖的动态库文件,再用上方法去解析
还可以再程序中用system()函数执行
readelf -d 可执行文件 | grep .*.so文件查看其依赖的动态库
|
1.
obj: obj.cpp obj.h other.h
g++ -c obj.cpp
2.
try{
// load library
}catch(...)
{
}
没试验过。
obj: obj.cpp obj.h other.h
g++ -c obj.cpp
2.
try{
// load library
}catch(...)
{
}
没试验过。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。