Ошибка компоновщика - неопределенная ссылка на
У меня есть проект, который зависит от проекта ведения журнала, когда я строю этот другой проект, я получаю следующие ошибки компоновщика:
Проект ведения журнала строится хорошо, однако, когда я использую проект ведения журнала внутри этого проекта в качестве библиотеки в параметрах компоновщика, он генерирует следующие ошибки, в моем проекте ведения журнала у меня действительно есть logger.cpp, в котором определен wxRegKey.
../logging/dist/Debug/MinGW_1-Windows/liblogging.a(Logger.o): In function `ZN7Logging6Logger17CreateRegistryKeyEv':
c:\logging/impl/Logger.cpp:125: undefined reference to `_imp___ZN8wxRegKeyC1ENS_6StdKeyERK8wxString'
c:\logging/impl/Logger.cpp:127: undefined reference to `_imp___ZN8wxRegKeyC1ENS_6StdKeyERK8wxString'
c:\logging/impl/Logger.cpp:129: undefined reference to `_imp___ZNK8wxRegKey6ExistsEv'
c:\logging/impl/Logger.cpp:135: undefined reference to `_imp___ZN8wxRegKeyD1Ev'
c:\logging/impl/Logger.cpp:140: undefined reference to `_imp___ZN8wxRegKeyC1ENS_6StdKeyERK8wxString'
c:\logging/impl/Logger.cpp:142: undefined reference to `_imp___ZNK8wxRegKey6ExistsEv'
c:\logging/impl/Logger.cpp:143: undefined reference to `_imp___ZN8wxRegKey6CreateEb'
c:\logging/impl/Logger.cpp:149: undefined reference to `_imp___ZNK8wxRegKey6ExistsEv'
c:\logging/impl/Logger.cpp:152: undefined reference to `_imp___ZN8wxRegKeyD1Ev'
c:\logging/impl/Logger.cpp:155: undefined reference to `_imp___ZN8wxRegKeyC1ENS_6StdKeyERK8wxString'
c:\logging/impl/Logger.cpp:156: undefined reference to `_imp___ZNK8wxRegKey6ExistsEv'
c:\logging/impl/Logger.cpp:157: undefined reference to `_imp___ZN8wxRegKey6CreateEb'
../logging/dist/Debug/MinGW_1-Windows/liblogging.a(Logger.o): In function
`ZN7Logging6Logger13GetLoggStatusEv':
c:\logging/impl/Logger.cpp:169: undefined reference to
`_imp___ZNK8wxRegKey8HasValueEPKc'
c:\logging/impl/Logger.cpp:170: undefined reference to
`_imp___ZNK8wxRegKey10QueryValueEPKcPl'
c:\logging/impl/Logger.cpp:176: undefined reference to
`_imp___ZN8wxRegKey8SetValueEPKcl'
../logging/dist/Debug/MinGW_1-Windows/liblogging.a(Logger.o): In function
`ZN7Logging6Logger12SetLoggLevelEv':
c:\logging/impl/Logger.cpp:186: undefined reference to
`_imp___ZNK8wxRegKey8HasValueEPKc'
c:\logging/impl/Logger.cpp:193: undefined reference to
`_imp___ZN8wxRegKey8SetValueEPKcRK8wxString'
c:\logging/impl/Logger.cpp:200: undefined reference to `_imp__wxConvUTF8'
../logging/dist/Debug/MinGW_1-Windows/liblogging.a(Logger.o): In function
`ZN12wxStringBase4InitEv':
C:/wxWidgets-2.8.12/include/wx/string.h:270: undefined reference to
`_imp__wxEmptyString'
../logging/dist/Debug/MinGW_1-Windows/liblogging.a(Logger.o): In function `wxStringBase':
C:/wxWidgets-2.8.12/include/wx/string.h:368: undefined reference to
`_imp___ZN12wxStringBase4nposE'
C:/wxWidgets-2.8.12/include/wx/string.h:368: undefined reference to
`_imp___ZN12wxStringBase8InitWithEPKcjj'
../logging/dist/Debug/MinGW_1-Windows/liblogging.a(Logger.o): In function
`ZNK8wxRegKey10QueryValueEPKcR8wxString':
C:/wxWidgets-2.8.12/include/wx/msw/registry.h:167: undefined reference to
`_imp___ZNK8wxRegKey10QueryValueEPKcR8wxStringb'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/MinGW_1-Windows/abcproject.dll] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
make[2]: Leaving directory `/c/abcproject'
make[1]: Leaving directory `/c/abcproject'
BUILD FAILED (exit value 2, total time: 34s)
порядок включения файла в logger.h
#include <vector>
#include <sstream>
#include <string>
#include <ctime>
#include <windows.h>
#include <winbase.h>
#include <wx/wx.h>
#include <wx/thread.h>
#include <wx/log.h>
#include <wx/app.h>
#include <wx/msw/registry.h>
#include <wx/utils.h>
#include <map>
Пожалуйста помоги
3 ответа
Вы, очевидно, забыли включить библиотеку, которая определяет несколько функций wxRegKey
учебный класс. Это то, что компоновщик говорит, что не может найти. Вы уверены, что logger.cpp определяет wxRegKey
и все его методы?
Я подозреваю, что ваш исходный код на самом деле не определяет ничего, связанного с wxRegKey
так как это на самом деле класс из внешней библиотеки. Вместо того, чтобы определять этот класс, вы включили заголовочный файл, в котором этот класс объявлен. Определение находится во внешнем файле, и вам необходимо указать системе сборки, какой это файл.
У вас есть ошибка компоновки, а не ошибка компиляции, поэтому порядок #include
заявления не имеет значения. Компилятор уже завершил компиляцию всего к тому времени, когда вы видите ошибки, о которых вы здесь сообщаете. Компилятор преобразовал ваш текстовый исходный код в двоичный объектный код, и теперь компоновщик пытается собрать все двоичные файлы вместе, чтобы сформировать конечную исполняемую программу. Бинарные файлы ссылаются на некоторые функции, которые, как было сказано компилятору, будут определены где-то еще, и теперь компоновщик пытается найти эти определения, но не может.
Если вы не знаете, где определены функции или как сообщить вашей системе сборки, где их искать, вам может потребоваться опубликовать еще один вопрос: с чем мне нужно связать ссылку, чтобы использовать wxRegKey? Как связать с wxWidgets в проекте NetBeans? Я не знаю ответов на эти вопросы, потому что я никогда не использовал эти инструменты.
Кажется, вы забыли добавить библиотеку wxBase
в командной строке компоновщика, кроме четных wxString
-символы не разрешены.
Вы, кажется, используете wxwidgets
, Вы уверены, что связываете правильную библиотеку, связывая конечный исполняемый файл? Пожалуйста, просмотрите команду, переданную компоновщику.