首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有人知道如何链接到`WSL`上的`ld`?

有没有人知道如何链接到`WSL`上的`ld`?
EN

Stack Overflow用户
提问于 2020-02-26 05:56:58
回答 1查看 493关注 0票数 0

我正在使用windows subsystem for linux WSL在clion上编译一个测试程序。我正在使用dlopen等在运行时加载库。我得到的错误是:

代码语言:javascript
复制
CMakeFiles/test.dir/test_add.cpp.o: In function `test_test_add_windows_Test::TestBody()':
/mnt/d/ACrossPlatformCppLibrary/test/test_add.cpp:26: undefined reference to `dlopen'
/mnt/d/ACrossPlatformCppLibrary/test/test_add.cpp:28: undefined reference to `dlsym'

Reports似乎建议我需要链接到ld。但是,添加

target_link_libraries(ACrossPlatformCppLibrary "${CMAKE_DL_LIBS}")

不工作,这并不奇怪,因为它看起来"${CMAKE_DL_LIBS}"在windows上是空的。所以我尝试手动给出ld的路径

target_link_libraries(ACrossPlatformCppLibrary "/usr/bin/ld")

有人知道如何在WSL上链接到ld

更新

多亏了@squareskittle的评论和答案,我注意到dl二进制文件在系统路径上不可用。仔细检查一下,WSL中根本不存在dl二进制文件。下面是我认为dl应该在的目录的剪切和粘贴:

代码语言:javascript
复制
$ cd /lib
$ ls
apparmor       hdparm                                libhandle.so.1.0.3  netplan        udev
console-setup  init                                  lsb                 open-iscsi     ufw
cpp            klibc-wBFLvVtxy4xJqEadIBJMa78iJz8.so  modprobe.d          recovery-mode  x86_64-linux-gnu
cryptsetup     **ld-linux.so.2**                         modules             systemd
ebtables       libhandle.so.1                        modules-load.d      terminfo
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-26 07:03:18

我认为您混淆了GNU链接库标志-l和库名称dl,它们在链接阶段一起显示为-ldl。如果库位于(WSL的)系统路径中,则也不需要库的完整路径。您可以简单地将库名dl放在此命令中:

代码语言:javascript
复制
 target_link_libraries(ACrossPlatformCppLibrary PRIVATE dl)

值得注意的是,如果您安装了适当的软件包,则WSL上的libdl.so库应该位于以下位置:

代码语言:javascript
复制
/lib/x86_64-linux-gnu/libdl.so.2
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60403761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档