将 gcc 命令分解为单独的编译和 link 步骤时出错

Error decomposing gcc command into separate compile and link steps

我在使用 scons 构建简单项目时遇到链接器错误。示例命令显示了程序二进制文件的集成编译和链接,而 scons 没有做到这一点(尽管我可能会强制它这样做,但如果可能的话我宁愿不这样做)。

这个命令工作正常:

gcc -o main.exe main.cpp C:\raylib\raylib\src\raylib.rc.data -s -static -Os -IC:\raylib\raylib\src -DPLATFORM_DESKTOP -lraylib -lopengl32 -lgdi32 -lwinmm

而这两个失败了:

g++ -o main.o -c -DPLATFORM_DESKTOP -Os -static -IC:\raylib\raylib\src main.cpp
ld -o mains.exe c:\raylib\raylib\src\raylib.rc.data -s -static main.o -LC:\raylib\raylib\src -lraylib -lopengl32 -lgdi32 -lwinmm

导致:

c:\raylib\w64devkit\bin\ld: cannot find -lopengl32
c:\raylib\w64devkit\bin\ld: cannot find -lgdi32
c:\raylib\w64devkit\bin\ld: cannot find -lwinmm

有什么见解吗?我对 .rc.data 文件不是特别熟悉。

我会尝试获取 gcc 的库搜索路径:

]$ gcc -x cpp-output -E -v /dev/null 2>&1 | grep LIBRARY_PATH | sed 's/:/\n/g'
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/11/
/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/
/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/
/lib/x86_64-linux-gnu/
/lib/../lib/
/usr/lib/x86_64-linux-gnu/
/usr/lib/../lib/
/usr/lib/gcc/x86_64-linux-gnu/11/../../../
/lib/
/usr/lib/

查看缺少的库是否在任何这些目录中,如果存在,则将它们作为 -L<path> 选项添加到 ld 调用中。

编辑

要在单独调用时查看 ld 搜索路径,我认为这应该可行:

]$ ld --verbose | grep SEARCH_DIR | sed 's/;/\n/g'
SEARCH_DIR("=/usr/local/lib/x86_64-linux-gnu")
 SEARCH_DIR("=/lib/x86_64-linux-gnu")
 SEARCH_DIR("=/usr/lib/x86_64-linux-gnu")
 SEARCH_DIR("=/usr/lib/x86_64-linux-gnu64")
 SEARCH_DIR("=/usr/local/lib64")
 SEARCH_DIR("=/lib64")
 SEARCH_DIR("=/usr/lib64")
 SEARCH_DIR("=/usr/local/lib")
 SEARCH_DIR("=/lib")
 SEARCH_DIR("=/usr/lib")
 SEARCH_DIR("=/usr/x86_64-linux-gnu/lib64")
 SEARCH_DIR("=/usr/x86_64-linux-gnu/lib")

当您消除重复项时,您会注意到 /usr/lib/gcc/x86_64-linux-gnu/11/ 是一个额外的目录,在使用 gcc (您的第一个命令)链接时会搜索该目录,但在直接使用 [=12= 链接时则不会].

但那是在我的机器上。你的可能会有点不同。