gpt4 book ai didi

c++ - 在Mac OS X上,libdl.so在哪里?

转载 作者:行者123 更新时间:2023-12-01 14:51:08 26 4
gpt4 key购买 nike

我对Mac非常陌生,并尝试编译一些链接到libdl.so的代码。

我使用CMake配置项目,并且在CMakeList中具有:

IF(UNIX)
FIND_LIBRARY(LIBDL_LIB NAMES libdl.so
PATHS /usr/lib/ usr/lib64/)
TARGET_LINK_LIBRARIES(PLUGINS_FRAMEWORK ${LIBDL_LIB})
ENDIF(UNIX)

这在Ubuntu上可以正常工作,但Mac OS X 10.9上没有libdl.so。

在Mac OS X上,libdl.so在哪里?

如果没有,我该怎么办?

谢谢 !

最佳答案

在Mac OS X上不需要特殊的库来获取dlopen()等。在Mac OS X上,共享库以.dylib.bundle结尾。

该代码无需额外的库即可编译:

#include <dlfcn.h>
#include <stdio.h>

int main(int argc, char **argv)
{
char *name = "libc.dylib";
if (argc > 1)
name = argv[1];
void *dlh = dlopen(name, 0);
if (dlh == 0)
printf("Failed to dlopen() %s\n", name);
else
printf("Got handle %p from dlopen() for %s\n", dlh, name);
dlclose(dlh);
return 0;
}

它运行并产生:
Got handle 0x7fff624e9378 from dlopen() for libc.dylib

汇编:
gcc -O3 -g -std=c11 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition -Werror dl.c -o dl

我在Mac OS X 10.9 Mavericks上使用GCC 4.8.2,但答案仍与仍受支持的任何版本的Mac OS X相同。

请注意,在Mac OS X上,等效于 ldd的是 otool -L,它会产生:
$ otool -L dl
dl:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
/usr/gcc/v4.8.2/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
$

我不确定幕后的魔术或拼写手段意味着打开 libc.dylib实际上有效。然而:
$ ./dl libSystem.B.dylib
Got handle 0x7fff6e398378 from dlopen() for libSystem.B.dylib
$ ./dl
Got handle 0x7fff690d2378 from dlopen() for libc.dylib
$

两者的地址相同,因此幕后可能正在进行一些映射。

关于c++ - 在Mac OS X上,libdl.so在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com