Предположим, у меня есть файл main.cpp
, который использует функцию sin()
, которая определена в libmath
. Также предположим, что у нас есть как libmath.a, так и libmath.so, доступные в том же каталоге. Теперь, если я выдаю команду g++ -o main main.cpp -lmath
, поведение Linux по умолчанию - это ссылка на общую библиотеку libmath.so
. Я хочу знать, есть ли способ заставить программу связываться со статической библиотекой libmath.a
без удаления или перемещения общей библиотеки?
Как я могу принудительно связывать статическую библиотеку, когда присутствует общая библиотека с таким же именем
Ответ 1
Вам нужно передать -статик в компоновщик, но только для конкретных библиотек, которые вы хотите. например:.
g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic
Ответ 2
Если ваш компоновщик поддерживает -l:<filename>
, вы можете использовать:
g++ -o main main.cpp -l:libmath.a
Ответ 3
Используйте эту функцию:
g++ -o main main.cpp /path_to/libmath.a