在Cygwin中针对psapi的G ++链接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Cygwin中针对psapi的G ++链接相关的知识,希望对你有一定的参考价值。

我有一个C ++项目,我曾经用Visual C ++构建。在我使用的项目中:

#pragma comment(lib, "psapi")

为了连接psapi

但是,G ++似乎不支持这种语法。根据我的理解,你必须传递带有库名称的-l标志才能链接到它。

我试过-lpsapi.lib-lpsapi。 但是gcc无法找到它。 所以我搜索了我能找到的地方,显然它在/lib/w32api/libpsapi.a。所以我尝试了-llibpsapi.a-llibpsapi,但它仍然无法找到它。 所以我尝试使用-L标志添加路径,就像-L/lib/w32api一样,但它仍然找不到它。 然后我尝试添加两个环境变量而不是-L标志:

export LIBRARY_PATH=/lib/w32api
export LD_LIBRARY_PATH=/lib/w32api

但它仍然无法正常工作。

错误消息是:

/usr/lib/gcc/x86_64-pc-cygwin/6.4.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -llibpsapi
collect2: error: ld returned 1 exit status

我的最后一次尝试是:

g++ -llibpsapi -o Example.exe Stuff.cpp Example.cpp -static

如果我完全离开-l标志,那么我得到这些错误btw:

/tmp/cctDMx8f.o:Stuff.cpp:(.text+0x139): undefined reference to `EnumProcessModules'
/tmp/cctDMx8f.o:Stuff.cpp:(.text+0x139): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `EnumProcessModules'
/tmp/cctDMx8f.o:Stuff.cpp:(.text+0x181): undefined reference to `EnumProcessModules'
/tmp/cctDMx8f.o:Stuff.cpp:(.text+0x181): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `EnumProcessModules'
/tmp/cctDMx8f.o:Stuff.cpp:(.text+0x1db): undefined reference to `GetModuleBaseNameA'
/tmp/cctDMx8f.o:Stuff.cpp:(.text+0x1db): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `GetModuleBaseNameA'
collect2: error: ld returned 1 exit status
答案

我想到了。首先,我必须使用-lpsapi,第二个重要的部分是我没有在-o标志之前插入它。以下工作正常:

g++ -o Example.exe Stuff.cpp Example.cpp -static -lpsapi

以上是关于在Cygwin中针对psapi的G ++链接的主要内容,如果未能解决你的问题,请参考以下文章

用cygwin在windows中链接linux静态库

在rpart情节中只形成一片叶子

怎么在vs2022中编译opencvmat类的源码

oracle database 9i/10g/11g 编程艺术 源代码下载

Mac 上的 G++ 链接时优化 - 编译器/链接器错误?

在 CMakeLists.txt 中链接 GSL