У меня есть один файл .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, но не исполняемый файл?