2016-01-08 5 views
0

В настоящее время я работаю с QT-Creator на MacOS, и я немного застрял в 2 точках на данный момент. У меня есть основной проект и два подпроекта. Пока это работает нормально.Qt не распознает другие подпроекты

Файл .pro основного проекта выглядит следующим образом:

//... 
TEMPLATE = subdirs 
SUBDIRS += Proj1 
SUBDIRS += Proj2 

Файл Proj1.pro выглядит следующим образом:

TARGET = Proj1 
CONFIG += console 
CONFIG -= app_bundle 

TEMPLATE = app 

SOURCES += someclass1.cpp 
HEADERS += someclass1.h 

Proj2.pro выглядит аналогично, за исключением Источниками и HEADERS части:

//... 
SOURCES += someclass2.cpp main.cpp 
HEADERS += someclass2.h 

Теперь к интересной части:

Мой someclass1.cpp содержит глобальную переменную и выглядит следующим образом:

#include "someclass1.h" 
int g_something = 18; 
SomeClass1::SomeClass1() {} 

Мои someclass2.cpp пытается получить доступ к этой глобальной переменной с помощью ключевого слова extern:

#include "someclass2.h" 
#include "../Proj1/someclass1.h" 
#include <stdio.h> 
extern int g_something; 
SomeClass2::SomeClass2() { 
    printf("g_something: %d\n", g_something); 
} 

Когда я t участвовав скомпилировать я получаю 2 ошибки:

Undefined symbols for architecture x86_64: 
    "_g_something", referenced from: 
     SomeClass2::SomeClass2() in someclass2.o ... 

и

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     start in crt1.10.6.o 

  • Я знаю, что первая ошибка приходит от использования g_something из someclass1 без надлежащей увязки Proj1 с Proj2 но я не Не знаю, как сообщить компоновщику, что я использую этот другой подпроект

  • Я предполагаю, что вторая ошибка существует, потому что у меня нет основного метода, определенного в проекте Proj1, но я не знаю, что делать, поэтому не ожидается никакого основного метода!

ответ

2

Если я правильно понимаю, вы пытаетесь скомпилировать два независимых приложения Proj1 и Proj2. Они не имеют никакой связи между собой. Они оба должны иметь функцию main(...). И, конечно, вы не можете объявить extern var в этом случае. Если вы хотите создать одно приложение, то ваши подпроекты должны быть библиотекой, а другой подпроект должен связываться с ним. Затем вы можете использовать внешнее объявление.

В Proj2.pro объявить TEMPLATE = lib. И в Proj1 добавьте ссылку с этим lib, как LIBS += -lProj2. Конечно, вы должны добавить путь к местоположению libproj2.

+0

вы можете дать мне немного больше информации? – ParkerHalo

+0

Спасибо! Это действительно помогло запустить мой проект! – ParkerHalo

1

Ваш proj1 должен быть lib, а не app, если вы хотите использовать extern. и ваш основной проект должен добавить ordered

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

  • Нет связанных вопросов^_^