Я совсем новичок в c++ и у меня проблема с отладкой ошибки компоновщика. Я использую wxDev-c++ с компилятором g++. Я создал статическую библиотеку, которую подключаю к базовому проекту. Изначально библиотека не содержала ссылок на внешние заголовочные файлы или библиотеки, это была просто пара простых тестовых функций, складывающих 2 двойки и возвращающих значение. Это прекрасно работало при подключении к тестовому проекту. Однако теперь я пытаюсь включить FTP в эту библиотеку и получаю ошибки компоновщика.
На данный момент тестовая функция просто пытается получить доступ к той же самой простой функции сложения для тестирования, я даже еще не вызываю функциональность FTP, поскольку я просто пытаюсь добиться правильной компиляции тестового проекта.
Код библиотеки:
DaFTPLib.h:
#ifndef WAVE_H
#define WAVE_H
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include <wx/wx.h>
#else
#include <wx/wxprec.h>
#endif
#include <wx/protocol/ftp.h>
namespace Wave
{
class DaFTP
{
public:
DaFTP(char *url, char *login, char *password);
~DaFTP();
const int Download(char* fileName);
static const void DownloadNCWD(char *url, char *fileName, char *login, char *password);
static const void DownloadLAMP();
static double FuncA(double a, double b);
static double FuncB(double a, double b);
private:
char* url, login, password;
wxFTP ftp;
};
}
#endif
DaFTP.cpp:
#include "DaFTPLib.h"
using namespace std;
char* _url;
char* _login;
char* _password;
wxFTP ftp;
namespace Wave
{
DaFTP::DaFTP(char *url, char *login, char *password)
{
_url = url;
_login = login;
_password = password;
}
DaFTP::~DaFTP(){}
const int DaFTP::Download(char *fileName)
{
int fileSize;
ftp.SetPassive(true);
ftp.SetUser(_login);
ftp.SetPassword(_password);
ftp.Connect(_url);
fileSize = ftp.GetFileSize(fileName);
return fileSize;
}
const void DaFTP::DownloadNCWD(char *url, char *fileName, char *login, char *password)
{
DaFTP daftp(url, login, password);
daftp.Download(fileName);
}
const void DaFTP::DownloadLAMP() {}
double DaFTP::FuncA(double a, double b)
{
return a + b;
}
double DaFTP::FuncB(double a, double b)
{
return a - b;
}
}
Код тестового проекта:
#include <cstdlib>
#include <iostream>
#include "../libDaFTP/DaFTPLib.h"
using namespace std;
int main(int argc, char *argv[])
{
double a, b, c;
a = 23.32;
b = 26.68;
c = Wave::DaFTP::FuncA(a, b);
cout << "FuncA val: " << c << endl;
c = Wave::DaFTP::FuncB(a, b);
cout << "FuncB val: " << c << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Вывод журнала компиляции для библиотеки (компилируется нормально):
Выполняю make... mingw32-make.exe -f "Makefile.win" all g++.exe -c DaFTPLib.cpp -o Objects/MingW/DaFTPLib.o -I "C:/Program Files (x86)/Dev-Cpp/lib/gcc/mingw32/3.4.5/include" -I "C:/Program Files (x86)/Dev-Cpp/include/c++/3. 4.5/backward" -I "C:/Program Files (x86)/Dev-Cpp/include/c++/3.4.5/mingw32" -I "C:/Program Files (x86)/Dev-Cpp/include/c++/3.4. 5" -I "C:/Program Files (x86)/Dev-Cpp/include" -I "C:/Program Files (x86)/Dev-Cpp/" -I "C:/Program Files (x86)/Dev-Cpp/include/common/wx/msw" -I "C: /Program Files (x86)/Dev-Cpp/include/common/wx/generic" -I "C:/Program Files (x86)/Dev-Cpp/include/common/wx/html" -I "C: /Program Files (x86)/Dev-Cpp/include/common/wx/protocol" -I "C:/Program Files (x86)/Dev-Cpp/include/common/wx/xml" -I "C:/Program Files (x86)/Dev-Cpp/include/common/wx/xrc" -I "C: /Program Files (x86)/Dev-Cpp/include/common/wx" -I "C:/Program Files (x86)/Dev-Cpp/include/common"
ar rcu "Output/MingW/libDaFTP. a" "Objects/MingW/DaFTPLib.o"
Выполнение завершено Компиляция прошла успешно Компиляция заняла 1 секунду
Вывод журнала компиляции для тестового проекта (компиляция не удалась)
Выполнение make... mingw32-make.exe -f "Makefile.win" all g++.exe -c main.cpp -o Objects/MingW/main.o -I "C:/Program Files (x86)/Dev-Cpp/lib/gcc/mingw32/3.4.5/include" -I "C:/Program Files (x86)/Dev-Cpp/include/c++/3. 4.5/backward" -I "C:/Program Files (x86)/Dev-Cpp/include/c++/3.4.5/mingw32" -I "C:/Program Files (x86)/Dev-Cpp/include/c++/3.4. 5" -I "C:/Program Files (x86)/Dev-Cpp/include" -I "C:/Program Files (x86)/Dev-Cpp/" -I "C:/Program Files (x86)/Dev-Cpp/include/common/wx/msw" -I "C: /Program Files (x86)/Dev-Cpp/include/common/wx/generic" -I "C:/Program Files (x86)/Dev-Cpp/include/common/wx/html" -I "C: /Program Files (x86)/Dev-Cpp/include/common/wx/protocol" -I "C:/Program Files (x86)/Dev-Cpp/include/common/wx/xml" -I "C: /Program Files (x86)/Dev-Cpp/include/common/wx/xrc" -I "C:/Program Files (x86)/Dev-Cpp/include/common/wx" -I "C:/Program Files (x86)/Dev-Cpp/include/common"
g++. exe "Objects/MingW/main.o" -o "Output/MingW/LibTest.exe" -L "C:/Program Files (x86)/Dev-Cpp/Lib" ../libDaFTP/Output/MingW/libDaFTP.a
Objects/MingW/main. o:main.cpp:(.rdata$_ZTV20wxThreadHelperThread[vtable for wxThreadHelperThread]+0xc): undefined reference to wxThread::TestDestroy()'
Objects/MingW/main.o:main.cpp:(.text$_ZN20wxThreadHelperThreadD1Ev[wxThreadHelperThread::~wxThreadHelperThread()]+0x16): неопределенная ссылка на
wxThread::~wxThread()'
Objects/MingW/main.o:main.cpp:(.text$_ZN20wxThreadHelperThreadD0Ev[wxThreadHelperThread::~wxThreadHelperThread()]+0x16): неопределенная ссылка на wxThread::~wxThread()'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text+0x10): undefined reference to
wxFTP::wxFTP()'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text+0x3e): undefined reference to wxFTP::wxFTP()'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text+0x6c): неопределенная ссылка на
wxFTP::~wxFTP()'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text+0x82): undefined reference to wxFTP::~wxFTP()'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text+0x1e3): undefined reference to
wxFTP::Connect(wxString const&)'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text+0x24e): undefined reference to wxFTP::GetFileSize(wxString const&)'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text+0x43f): undefined reference to
wxFTP::wxFTP()'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text+0x45a): undefined reference to wxFTP::~wxFTP()'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text$_ZN8wxStringaSERKS_[wxString::operator=(wxString const&)]+0x14): неопределенная ссылка на
wxStringBase::operator=(wxStringBase const&)'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text$_ZN12wxStringBaseC2EPKc[wxStringBase::wxStringBase(char const*)]+0x7): undefined reference to wxStringBase::npos'
../libDaFTP/Output/MingW/libDaFTP.a(DaFTPLib.o):DaFTPLib.cpp:(.text$_ZN12wxStringBaseC2EPKc[wxStringBase::wxStringBase(char const*)]+0x25): undefined reference to
wxStringBase::InitWith(char const*, unsigned int, unsigned int)'
collect2: ld вернул 1 статус выхода
mingw32-make.exe: * [Output/MingW/LibTest.exe] Error 1
Execution terminated Compilation Failed. Make returned 2