我有一个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
标志,那么我将得到以下错误:/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