栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Golang:调用Windows DLL函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang:调用Windows DLL函数

如果您尝试链接到DLL,则需要/想要LDFLAGS中的“-lMyModule”?

请看看ld和WIN32(cygwin / mingw)。特别是,直接链接到dll部分以获取有关-lLDWindows端口上标志行为的更多信息。提取:

例如,当使用参数-lxxx调用ld时,它将尝试在其搜索路径的第一个目录中查找,

libxxx.dll.axxx.dll.alibxxx.acygxxx.dll (*)libxxx.dllxxx.dll

移至搜索路径中的下一个目录之前。

(*)
实际上不是,cygxxx.dll但实际上是
<prefix>xxx.dll,<prefix>
由ld选项设置
-dll-search-prefix=<prefix>
。对于cygwin,标准的gcc规范文件包括在内
-dll-search-prefix=cyg
,因此实际上我们实际上是在搜索cygxxx.dll。

注意:如果您曾经用MinGW构建Boost,您可能还记得,Boost库的命名完全遵循上面链接中描述的模式。

过去在MinGW中存在直接链接到的问题.dll,因此建议创建一个静态库lib.a,.dll并从中导出符号并与其进行链接。现在,指向此MinGW Wiki页面的链接已失效,因此我认为直接针对.dll现在链接应该没问题。此外,我自己使用最新的MinGW-w64发行版做了几次,但还没有问题。

您需要链接标志,

-Wl,-Bstatic
并且
-Wl,-Bdynamic
因为有时您想强制进行静态链接,例如,当搜索路径中也存在具有相同名称的动态库时:

gcc object1.o object2.o -lMyLib2 -Wl,-Bstatic -lMyLib1 -Wl,-Bdynamic -o output

上面的代码段保证-l标记的默认链接优先级被覆盖MyLib1,即,即使MyLib1.dll搜索路径中存在,LD也会选择libMyLib1.a链接。请注意,对于MyLib2LD而言,它将再次偏向于动态版本。

注意:如果

MyLib2
依赖于
MyLib1
,那么
MyLib1
也会动态链接,无论如何
-Wl,-Bstatic
(即在这种情况下将其忽略)。为了防止这种情况,您也必须
MyLib2
静态链接。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413158.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号