有人知道如何 link 对抗 `WSL` 上的 `ld` 吗?

Does anybody know how to link against `ld` on `WSL`?

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

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 似乎暗示我需要 link 反对 ld。但是,添加

target_link_libraries(ACrossPlatformCppLibrary "${CMAKE_DL_LIBS}")

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

的路径

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

有人知道如何在 WSL 上 link 对抗 ld 吗?

更新

感谢@squareskittles 的评论和回答,我注意到 dl 二进制文件在系统路径上不可用。仔细观察,WSL 中根本不存在 dl 二进制文件。这是我认为 dl 应该位于的目录的剪切和粘贴:

$ 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

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

 target_link_libraries(ACrossPlatformCppLibrary PRIVATE dl)

对于它的价值,如果您安装了正确的软件包,WSL 上的 libdl.so 库应该位于此处:

/lib/x86_64-linux-gnu/libdl.so.2