Связывание общей, статической и динамической библиотеки

Я собрал и установил исходный код spidermonkey, я хочу связать его библиотеку и папку include с моим приложением C ++, поэтому я написал эту команду для Linux

 g++ -I/home/SpiderMonkey/js-1.8.5/js/src/dist/include
-L/home/SpiderMonkey/js1.8.5/js/src/dist/lib -lmozjs185  helloworld.cpp -o

но это дает мне неопределенную ошибку ссылки, так в чем же проблема с этой командой:
путь, в который был встроен код src, это home / SpiderMonkey / js1.8.5 / src
и когда я установил код src, его библиотеки libs и include теперь существуют в usr / local / lib и usr / local / include / js соответственно, поэтому какой путь мне следует использовать в команде для компиляции моего hellowrorld.cpp.
Кроме того, я нашел 3 библиотеки с тем же именем, но с другим расширением:

libname.so, libname.so.1.0, libname.so.1.0.0 and libname.a

какую библиотеку я должен использовать и каковы различия?

1

Решение

Положить библиотеки после ваш main.cpp по команде компиляции. Компоновщик определяет, какие символы вытащить из этих библиотек, на основе объектов, которые он уже видел, слева направо.

Что касается вашего дополнительного вопроса:

  • libname.a для статического связывания.

  • libname.so, libname.so.1.0 а также libname.so.1.0.0 это все один и тот же файл, только с именами, которые повышают уровень детализации информации о версии.

То, что использовать, выходит за рамки этого ответа, но вы можете найти много информации о том, что уже существует в Интернете.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]