Как я могу принудительно установить связь со статической библиотекой, когда присутствует общая библиотека с тем же именем - PullRequest
30 голосов
/ 21 декабря 2010

Предположим, у меня есть файл main.cpp, в котором используется функция sin(), определенная в libmath.Также предположим, что у нас есть и libmath.a, и libmath.so, доступные в одном каталоге.Теперь, если я введу команду g++ -o main main.cpp -lmath, по умолчанию в Linux будет ссылка на общую библиотеку libmath.so.Я хочу знать, есть ли способ заставить программу связываться со статической библиотекой libmath.a без удаления или перемещения общей библиотеки?

Ответы [ 3 ]

25 голосов
/ 21 декабря 2010

Вам нужно будет передать -static компоновщику, но только для определенных библиотек, которые вы хотите. e.g.:

g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic
9 голосов
/ 21 декабря 2010

Если ваш компоновщик поддерживает -l:<filename>, вы можете использовать:

g++ -o main main.cpp -l:libmath.a
5 голосов
/ 21 декабря 2010

Используйте эту функцию:

g++ -o main main.cpp /path_to/libmath.a
...