2013-08-20 2 views
3

мне нужно связать libA.a библиотеку в моем qmake файл дважды:qmake: Как связать библиотеку дважды?

LIBS = -lA \ 
     -lB \ 
     -lA \ 
     -lC \ 
     -lD 

qmake но удаляет первый -lA во время работы g++. Что мне делать?

+0

Просто любопытно; зачем вам это нужно? –

+0

@NikosC. Циклическая зависимость. – Meysam

ответ

3

Скажите QMAKE отключить объединение всех LIBS флагов с:

CONFIG += no_lflags_merge

Однако это приведет все дублирующие библиотеки не будет очищено. Однако это не имеет значения на практике.

В качестве альтернативы вы можете обмануть qmake так, чтобы он не обнаружил дублируемую библиотеку; поскольку она соответствует только строки и на самом деле не разобрать библиотеки флагов, вы можете сделать:

LIBS += -lA -lB -l A -lC -lD

Обратите внимание на разницу между -lA и -l A. Это гарантирует, что qmake не будет считать эти флаги равными, хотя с точки зрения компилятора они равны, поскольку компилятор делает фактический синтаксический анализ аргумента командной строки, а qmake - нет.

+0

Что он производит: 'g ++ -lA -lB -lA -Wl, -O1 -Wl, -rpath,/opt/Qt5.1.0/5.1.0/gcc -Wl, -rpath,/opt/Qt5.1.0/5.1.0/gcc/lib -o TableView main.o mainwindow.o customsqlmodel.o model.o helper.o cdrlistmodel.o moc_mainwindow.o moc_customsqlmodel.o -lC -lD -L/opt/Qt5.1.0 // 5.1. 0/gcc/lib -lQt5Widgets -lQt5Sql -lQt5Gui -lQt5Core -lGL -lpthread' – Meysam

+0

Но это не работает, потому что '-lA -lB -lA' сразу после' g ++ '. Если я перемещаю их до '-lC -l' (вручную), программа компилируется успешно: ' g ++ -Wl, -O1 -Wl, -rpath,/opt/Qt5.1.0/5.1.0/gcc -Wl, -rpath,/opt/Qt5.1.0/5.1.0/gcc/lib -o TableView main.o mainwindow.o customsqlmodel.o model.o helper.o cdrlistmodel.o moc_mainwindow.o moc_customsqlmodel.o -lA -lB -lA -lC ​​-lD -L/opt/Qt5.1.0 // 5.1.0/gcc/lib -lQt5Widgets -lQt5Sql -lQt5Gui -lQt5Core -lGL -lpthread' – Meysam

+0

Любое обходное решение? – Meysam

0

насчет:

QMAKE_LFLAGS += -(-lA -lB -) 

?

Edit: вы пытались

QMAKE_LFLAGS += -(-lA -lB -lC -lD -) 

Что этот синтаксис делает то, что он будет решать все depencies между библиотеками, даже если они несколько рекурсивный (A :: материал нуждается в B :: материал нуждается в C :: материалу нужен :: материал)

+0

Не могли бы вы также включить библиотеки 'C' и' D'? – Meysam

+0

Я получаю эту ошибку: '/ bin/sh: Синтаксическая ошибка:" ("неожиданный make: *** [TableView] Ошибка 2' – Meysam

+0

И это последняя команда, выполненная с синтаксической ошибкой:' g ++ - (-lA -lB -lC -lD -) -Wl, -rpath,/opt/Qt5.1.0/5.1.0/gcc -Wl, -rpath,/opt/Qt5.1.0/5.1.0/gcc/lib -o TableView main .o mainwindow.o customsqlmodel.o model.o helper.o cdrlistmodel.o moc_mainwindow.o moc_customsqlmodel.o -L/opt/Qt5.1.0 // 5.1.0/gcc/lib -lQt5Widgets -lQt5Sql -lQt5Gui -lQt5Core -lGL -lpthread' – Meysam

Смежные вопросы