gcc编译报错解决方案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Gcc最基本的用法是∶

gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。

-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

1.linker input file unused because linking not done

我在Windows下使用SQLite编了个C++程序,在编写Makefile并使用cygwin 中的g++进行编译链接时遇到如下的错误:

linker input file unused because linking not done

我的语句是g++ -c a.cpp -lsqlite3

到网上查了一下,问题出在链接数据库的语句不应出现在编译语句里面。上面的语句里面有-c 即编译compile,所以命令会忽略掉所有的-l 链接库的命令。

而要链接数据库,应该在生成可执行文件时才使用。

正确的使用链接的语句应该是g++ a.o -L. -lsqlite3 -o exename

2.Linux系统的头文件和库文件搜索路径

**#include**的头文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。

∙当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib()

∙写在specs内的(针对rpm包)

∙后来用-D -I -L指定的

∙gcc环境变量设定(编译的时候)

∙ld.so的环境变量(这是run time的时候)

头文件

gcc 在编译时如何去寻找所需要的头文件:

∙header file的搜寻会从-I开始

∙然后找gcc的环境变量C_INCLUDE_PA TH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PA TH

∙再找内定目录:

o/usr/include

o/usr/local/include

o/usr/lib/gcc-lib/i386-linux/2.95.2/include

o/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3

o/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include

∙库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是

o/usr/include

o prefix/include

o prefix/xxx-xxx-xxx-gnulibc/include

o prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include

库文件

cos()等函式库的选项要多加-lm

∙编译的时候:gcc会去找-L

∙再找gcc的环境变量LIBRARY_PATH

∙再找内定目录/lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

运行时动态库的搜索路径

1 在配置文件/etc/ld.so.conf中指定动态库搜索路径

2 通过环境变量LD_LIBRARY_PA TH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)

3 在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。这是通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间用冒号":"分隔)

4 默认的动态库搜索路径/lib

5 默认的动态库搜索路径/usr/lib

动态库的搜索路径搜索的先后顺序是:

1 编译目标代码时指定的动态库搜索路径;

2 环境变量LD_LIBRARY_PA TH指定的动态库搜索路径;

3 配置文件/etc/ld.so.conf中指定的动态库搜索路径;

4 默认的动态库搜索路径/lib;

5 默认的动态库搜索路径/usr/lib。

相关文档
最新文档