有时当我做一个小项目时,我不够小心,并且意外地为我不知道的DLL添加依赖项.当我将此程序发送给朋友或其他人时"它不起作用",因为"某些DLL"丢失了.这是因为程序可以在我的系统上找到DLL,但不能在他们的系统上找到.
是否有程序/脚本可以扫描可执行文件的DLL依赖项或在"干净的"无DLL环境中执行程序以进行测试以防止这些oops情况?
我遇到了一段使用#pragma comment(lib,"libraryname")的代码.
为什么这种用法与仅从属性菜单链接库相反?在什么情况下需要这种用法?我在使用C++ Visual Studio 2010的 Windows中.
很高兴看到一个需要这种用法的例子.
我有一个C++程序,它有一些插件结构:当程序启动时,它在插件文件夹中查找带有某些导出函数签名的dll,例如:
void InitPlugin(FuncTable* funcTable);
Run Code Online (Sandbox Code Playgroud)
然后程序将调用dll中的函数来初始化并将函数指针传递给dll.从那时起,dll可以与程序通信.
我知道Cython允许你在Python中调用C函数,但我不确定我是否可以编写一个Cython代码并将其编译为dll,这样我的C++程序就可以用它进行初始化.一个示例代码会很棒.
我在 ubuntu 20.04 中使用嵌入式 Python (3.9) 并尝试导入产生错误的 ctypes _ctypes.cpython-39-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type。
我正在编译一个共享对象,它是使用 动态加载的dlopen()。
CMake用于构建共享对象。我像这样声明 Python3 依赖关系:
find_package(Python3 REQUIRED COMPONENTS Development Development.Embed)并使用链接target_link_libraries(${target_name} Boost::filesystem Python3::Python)
如果我理解正确,这会告诉 CMake 直接链接到libpython3.9.so(我也尝试明确声明链接到libpython3.9.so,但这并没有解决问题)。我确实看到libpython3.9.so有出口PyFloat_Type,但_ctypes.cpython-39-x86_64-linux-gnu.so没有看到。
导入只需通过以下PyRun_SimpleString()函数即可完成:PyRun_SimpleString("import ctypes")。
我应该声明,我在网上看到了一些解决方案,但没有一个有效(例如导出LD_FLAGS="-rdynamic",但也没有帮助)。
我还应该指出,使用解释器(python3.9)导入效果很好。
以下是 CMake 生成的构建命令:
/usr/bin/c++ -fPIC -g -Xlinker -export-dynamic -shared -Wl,-soname,mytest.python3.so -o mytest.python3.so CMakeFiles/mytest.python3.dir/[mydir]/[myobjects].o /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 /usr/lib/x86_64-linux-gnu/libpython3.9.so /usr/lib/x86_64-linux-gnu/libpython3.9.so
感谢您提前提供任何帮助!