使用不带-L'的任意库文件创建gcc-x somelang链接;正在编辑它的目录?
我有一个名为使用不带-L'的任意库文件创建gcc-x somelang链接;正在编辑它的目录?,gcc,command-line,linker,libraries,Gcc,Command Line,Linker,Libraries,我有一个名为foo.bar的源文件,就这个问题而言,无法重命名或链接到该文件。假设它是C++源文件。现在,我想使用path/to/wird_lib_file上的库,在同一个命令中编译并链接它。现在,如果源文件名是foo.cpp,我可以执行以下操作: gcc -o foo foo.cpp /path/to/weird_lib_file 那就行了。但是如果我写 gcc -o foo -x c++ foo.cpp /path/to/weird_lib_file 它不起作用。现在,我可以做了 gcc
foo.bar
的源文件,就这个问题而言,无法重命名或链接到该文件。假设它是C++源文件。现在,我想使用path/to/wird_lib_file
上的库,在同一个命令中编译并链接它。现在,如果源文件名是foo.cpp
,我可以执行以下操作:
gcc -o foo foo.cpp /path/to/weird_lib_file
那就行了。但是如果我写
gcc -o foo -x c++ foo.cpp /path/to/weird_lib_file
它不起作用。现在,我可以做了
gcc -o foo -x c++ foo.cpp -L /path/to/ -l:weird_lib_file
正如这里所建议的:
但出于某种原因,我也不想进入,我宁愿不-L那个文件夹。我还能强迫GCC以某种方式链接到单个库文件吗?似乎
-l:/path/to/wird_lib_文件
不起作用。如果您不-l
库的路径,您可以
通过绝对或相对路径名指定库。在
后一种情况下,不管图书馆叫什么,它都会被拿走
作为链接器输入,除非它具有使其
似乎是源文件。因此
gcc -o prog main.c foo.xyz
将编译main.c
并将main.o
链接到库/foo.xyz
(如果处于
事实上,无论是静态的还是共享的,它都可以满足这种联系
以后
(编辑之前,问题没有提到-x
选项)
-x
选项的引入如中所示:
gcc -o prog -x c++ main.cpp foo.xyz
引发如下错误:
foo.xyz:2:1: error: stray ‘`’ in program
/ 0 0 0 0 16 `
^
foo.xyz:3:1: warning: null character(s) ignored
T_Z3foov foo.o/ 0 0 0 644 1544 `
^
foo.xyz:3:4: error: stray ‘\1’ in program
T_Z3foov foo.o/ 0 0 0 644 1544 `
^
...
...
即使foo.xyz
实际上是一个可以满足链接的库,
用一个非正统的名字
这是必须的,因为-xc++
指示gcc分析后续的输入文件
作为C++源代码,直到另行通知。作为
-x语言
明确指定以下输入文件的语言(而不是
让编译器根据文件名后缀选择默认值)。
此选项适用于以下所有输入文件,直到下一个-x选项
而且再也没有通知了
当然,这种情况不会发生,例如:
gcc -o prog -x c++ main.cpp -L. -l:foo.xyz
因为-l:foo.xyz
不是一个输入文件,而是一个链接器选项(在
与-L.
一起指定输入文件)
为了避免这种结果,您必须放弃坚持认为foo.xyz
是
C++源文件,在达到之前,取消代码> -xC++ +代码>,如:
gcc -o prog -x c++ main.cpp -x none foo.xyz
如文件所述:
-x无
关闭语言的任何规范,以便处理后续文件
根据它们的文件名后缀(如果根本没有使用-x,它们就是这样)
这对我不起作用。。。六羟甲基三聚氰胺六甲醚。。。也许我掉了上面例子中的一些开关。让我编辑一下。太棒了,谢谢。我没有意识到我可以-x两次。因此,如果您感兴趣,这就是动机(尽管实际上库名称以
.So
结尾)。