链接到Windows.dll+;。Cygwin下的lib文件与GCC的组合?

链接到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,则可以(

我知道如何在Unix ish上下文中链接库:如果我使用
.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++