使用不带-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
结尾)。