3. 参数:-nostdinc使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置。
在编译驱动模块时,由于非凡的需求必须强制GCC不搜索系统默认路径,也就是不搜索/usr/include要用参数-nostdinc,还要自己用-I参数来指定内核头文件路径,这个时候必须在Makefile中指定。
头文件搜索顺序: 1.由参数-I指定的路径(指定路径有多个路径时,按指定路径的顺序搜索)
2.然后找gcc的环境变量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
3.再找内定目录 /usr/include /usr/local/include/usr/lib/gcc-lib/i386-linux/2.95.2/include/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
库文件,但是如果装gcc的时候,是有给定的prefix的话,那么就是 /usr/include prefix/includeprefix/xxx-xxx-xxx-gnulibc/includeprefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
三.Linux指定动态库路径
众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib。动态库被创建后,一般都复制到这两个目录中。当程序执行时需要某动态库,并且该动态库还未加载到内存中,则系统会自动到这两个默认搜索路径中去查找相应的动态库文件,然后加载该文件到内存中,这样程序就可以使用该动态库中的函数,以及该动态库的其它资源了。printf()函数在Linux 中,动态库的搜索路径除了默认的搜索路径外,还可以通过以下三种方法来指定。
举一个例子: 所有源文件: 源文件1: lib_test.c #include void prt() { printf('Youfound me!!!/n'); } 源文件2: main.c void prt(); int main() { prt();return 0; } 操作过程: 我们通过以下命令用源程序lib_test.c来创建动态库 lib_test.so。 # gcc–o lib_test.o -c lib_test.c # gcc -shared -fPIC -o lib_test.solib_test.o # 或者直接一条指令: #gcc –shared –fPIC –o lib_test.so lib_test.c#
注意: -fPIC参数声明链接库的代码段是可以共享的, -shared参数声明编译为共享库。请注意这次我们编译的共享库的名字叫做lib_test.so,这也是Linux共享库的一个命名的惯例了:后缀使用so,而名称使用libxxxx格式。
接着通过以下命令编译main.c,生成目标程序main.out。 # gcc -o main.out -L. –l_testmain.c #
请注意为什么是-l_test?
然后把库文件移动到目录/root/lib中。 # mkdir /root/lib # mv lib_test.so/root/lib/ lib_test.so #
# ldconfig # ./main.out You found me!!! #程序main.out运行成功,并且打印出正确结果。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-90979-9.html
希望台湾人民在台湾独立前离开台湾
让得意的人有一丝谦卑和体会生命的失意
高温消毒