链接到Windows.dll+;。Cygwin下的lib文件与GCC的组合?
我知道如何在Unix ish上下文中链接库:如果我使用链接到Windows.dll+;。Cygwin下的lib文件与GCC的组合?,c,gcc,dll,linker,cygwin,C,Gcc,Dll,Linker,Cygwin,我知道如何在Unix ish上下文中链接库:如果我使用.a或文件,我会使用-L/my/path/to/lib/指定根搜索目录,并为libMylib添加-lMyLib 但是如果我有呢 .dll(例如在Windows\System32目录中) 一个.dll(在Windows\System32中)和一个.lib(在其他地方) 这些DLL是由其他方提供的;我无法访问它们的源代码,但可以访问相应的include文件,我可以根据这些文件进行编译。如果可以链接Cygwin或MinGW中的.lib,则可以(
.a
或文件,我会使用-L/my/path/to/lib/
指定根搜索目录,并为libMylib添加-lMyLib
但是如果我有呢
.dll
(例如在Windows\System32
目录中)
- 一个
.dll
(在Windows\System32
中)和一个.lib
(在其他地方)
这些DLL是由其他方提供的;我无法访问它们的源代码,但可以访问相应的include文件,我可以根据这些文件进行编译。如果可以链接Cygwin或MinGW中的.lib
,则可以(间接)链接DLL
在MSVC世界中,创建一个导入库和一个DLL是很常见的。它是一个静态库(.lib
),用于加载DLL并包装DLL的接口。您只需调用(静态)导入库中的包装函数,并让导入库执行所有与DLL相关的操作
- 对于Windows API,Windows SDK中有导入库
- 对于您自己的MSVC DLL,MSVC可以在您构建DLL时自动生成导入库
- 对于第三方DLL,可以基于相应的头文件构建静态包装器库
可以针对Cygwin或MinGW中的.lib
文件进行链接。例如:
g++ -o myprg myprg.o -lShlwapi
此链接指向Shlwapi.lib。(库必须位于本地目录或链接器的库路径中。)
针对DLL的导入库进行链接的方式与此相同
注1:记住不同的ABI和名称mangeling。但是,在DLL或LIB文件中调用普通C函数在大多数情况下都可以工作
注2:请记住,g++要求以正确的顺序指定库。使用.lib
或.dll
文件的完整路径名,不使用-L
或-L
,只使用文件名,如g++-o foo.exe foo.o c:\somethingese\somethingelse.lib
。(您也可以使用通常的-L/-L约定,但前提是库名称文件以“lib”开头,而在Windows下通常不是这样)。@n.m.:这样做了,它就不起作用了。。。你确定这有用吗?对我有用。你犯了什么错误?很抱歉,我又犯了同样的错误,我尝试了不同的方法,包括你的建议@n.“代词m”。直接链接到lib文件。但我仍然得到一个“未定义引用”错误。我使用的是qmake和mingw73_64的g生成的make++