【发布时间】:2015-04-20 23:34:08
【问题描述】:
是否可以以编程方式和跨平台方式检索链接到当前进程的共享库(*.dll、*.so、*.dylib)列表?
例如:
vector<string> getLinkedSharedLibraries() {
// ...
}
vector<string> sharedLibraryList = getLinkedSharedLibraries();
for (list<string>::iterator it = sharedLibraryList.begin(); it != sharedLibraryList.end(); ++it)
cout << *it << endl;
会返回:
/usr/lib/libz.1.dylib
/usr/lib/libSystem.B.dylib
...
我正在考虑使用操作系统命令,例如 Linux 上的 ldd 和 Mac 上的 otool -L,然后最终使用 [DY]LD_LIBRARY_PATH 来检索那里的绝对路径。但我在 Windows 上没有找到类似的方法。
或者,是否有任何现有的图书馆在做这种事情?
【问题讨论】:
-
没有名为“C/C++”的语言,你的代码是C++。请更正您的标题。
-
windows上的解决方案比较失望:stackoverflow.com/questions/1993673/…
-
旁白:为什么函数不返回库,而是将它们作为输出参数传递?通常不建议这样做 - 即很少有有效的用例。
-
你是对的。我这样做是为了避免复制,但现代编译器似乎处理得更好(stackoverflow.com/questions/514908/…)。我正在编辑问题..
标签: c++ dll shared-libraries dylib