Добавление объектных (.o) файлов в проект qtcreator

Как добавить сторонние файлы.o и.h в проект Qt C++ в QtCreator? Я хочу добавить некоторые скомпилированные файлы.o из John The Ripper в мой тест (не обращайте внимания на неплатежеспособность). В качестве теста автор написал небольшую C-программу (вне QtCreator) и связал ее с common.o а также MD5_std.o и это работало нормально; Я могу просто сделать gcc -o runme common.o MD5_std.o simpleprogram.c, но с QtCreator, кажется, ничего не работает. Я продолжаю получать неопределенные ссылки.

Я попытался добавить это в файл.pro:

LIBS += "$$_PRO_FILE_PWD_/common.o" "$$_PRO_FILE_PWD_/MD5_std.o" 

И это:

LIBS += /full/path/to/common.o /full/path/to/MD5_std.o

Я тоже пробовал настройку INCLUDEPATH и добавление файлов.o в качестве "других файлов" и "источников" в файл.pro, но независимо от того, что я делаю, вызовы функций в файлах.o всегда приводят к неопределенным ссылкам.

Кроме того, из всех советов, которые я нашел в интернете (что сработало для них, как ни странно), я не нашел способа добавить файлы.o в проект таким образом, чтобы они копировались в теневую сборку. каталог и ссылки оттуда. Я, кажется, неправильно ссылаться на $$_PRO_FILE_PWD_,

Кстати, то, что я получил на работу, это привязка системной библиотеки. Когда я добавлю -lcrypt в LIBS и включать unistd.hЯ могу нормально вызывать функцию crypt.

1 ответ

Решение

Судя по вашим комментариям, у вас как минимум две проблемы:

1) Вам нужно использовать переменную OBJECTS в qmake, чтобы выполнить вашу операцию с -o аргумент gcc. Здесь вы можете найти документацию этого:

ОБЪЕКТЫ

Эта переменная автоматически заполняется из переменной SOURCES. Расширение каждого исходного файла заменяется на.o (Unix) или.obj (Win32). Вы можете добавить объекты в список.

Исходя из этого, вы бы написали что-то вроде этого:

OBJECTS += common.o MD5_std.o

Обратите внимание, что вам также нужно будет использовать спецификацию связывания "extern C", чтобы избежать искажения имени. Это необходимо, чтобы иметь возможность ссылаться при использовании стороннего объекта из кода C и такой компиляции. Вам нужно написать это для соответствующих функций C:

extern "C"
{
    ...
}
Другие вопросы по тегам