与gcc链接时出错?
我运行以下命令链接项目中的不同文件与gcc链接时出错?,c,gcc,linker,C,Gcc,Linker,我运行以下命令链接项目中的不同文件 /opt/gcc-4.7-cilkplus/bin/gcc -g -Wall -l /opt/gcc-4.7-cilkplus/lib64/ -o exec main.o \ mysql-client.o databaseConnection-common.o murmurhash3.o bloom-filter.o `mysql_config --cflags --libs\` -lcilkrts 注意选项-l/opt/gcc-4.7-ci
/opt/gcc-4.7-cilkplus/bin/gcc -g -Wall -l /opt/gcc-4.7-cilkplus/lib64/ -o exec main.o \
mysql-client.o databaseConnection-common.o murmurhash3.o bloom-filter.o
`mysql_config --cflags --libs\` -lcilkrts
注意选项-l/opt/gcc-4.7-cilkplus/lib64/
运行此命令时,出现以下错误:
/usr/bin/ld:找不到-l/opt/gcc-4.7-cilkplus/lib64/
但是这个目录在我的系统中存在。谁能告诉我这个错误。-l(el)后面应该跟一个库,而不是目录。也许你的意思是-L或-I(眼睛)你正在使用
-L
你应该在哪里使用-L
。选项-l
指定库,而-l
指定要在其中查找库的目录
还请注意,
-l
或-l
与其各自的值之间没有空格。-Lpath/to/lib-lname
是语法(在-l
和-l
之后没有空格)。例如,如果链接到一个静态库,这意味着应该使用path/to/lib/libname.a进行链接
另外,请注意链接器的参数顺序很重要。也就是说,如果对象A
使用库B
,则应在其后面写入B
。如果B
本身使用C
,那么首先应该提到A
,然后是B
,然后是C
因此,您的命令可能如下所示:
/opt/gcc-4.7-cilkplus/bin/gcc -g -Wall -o exec main.o mysql-client.o \
databaseConnection-common.o murmurhash3.o bloom-filter.o \
`mysql_config --cflags --libs\` -L/opt/gcc-4.7-cilkplus/lib64/ -lcilkrts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Used -L and moved here
-L
告诉链接器要搜索的目录。这几乎肯定是我的错。我现在明白了。您是否可以告诉其他地方指定这些链接器库,这样我就不必每次都通过执行-L来包含这些链接器库(就像gcc每次在链接之前搜索的某个路径变量)