【发布时间】:2019-10-03 04:58:35
【问题描述】:
我确实有一个 .cpp 文件,当我使用以下命令将其转换为可执行文件时:
g++ -std=c++11 command.cpp -o command -lsomereference
如果我理解正确,它会将command.cpp 编译成一个名为command 的可执行文件,并且在执行此操作时,它确实链接了我的名为somereference 的外部引用。如果我的理解有任何错误,请纠正我。
这很好用。事实上,如果我从我的编译命令中删除 -lsomereference,那么它会引发很多链接错误,这告诉我显式链接到 somereference uisng -lsomereference 标志很重要。
现在,我可以在我的 C# 程序中引用这个可执行文件并 P/Invoke 进入主函数。所以它一直适用于 C# 代码。
现在,我的计划是将它用作 P/Invokable 库,所以基本上我需要的不是可执行文件,而是共享库
所以在搜索之后,意识到我必须使用-c flag来创建一个共享库,我使用了以下命令:
g++ -std=c++11 command.cpp -o command.so -c
使用此命令,我无法显式链接 -lsomereference,因为 -c 标志将忽略链接。
现在,如果我尝试将此 command.so 文件引用到我的 C# 程序中,则会失败并出现以下错误:
command.so' or one of its dependencies. In order to help diagnose loading problems, consider setting the DYLD_PRINT_LIBRARIES environment variable:
我不知道可执行文件和 .so 文件之间发生了什么巨大变化(我的猜测是可执行文件是使用显式链接编译的)和共享库(command.so)文件是使用 -c 标志编译的可能是问题.
什么可能会破坏 command.so 文件而不是可执行文件?
【问题讨论】: