Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   c++: undefined reference to ... (https://www.delphipraxis.net/144724-c-undefined-reference.html)

geisi 15. Dez 2009 09:20


c++: undefined reference to ...
 
hallo, hab jetzt schon lange delphi programmiert und wollte mal ein bisschen c++ programmieren, doch ich schaff es nicht. ich hab jetzt schon ewig im netz gesucht, aber nichts gefunden. ich weiß ja nicht einmal, wo ich den fehler mache: beim compilieren, in der settings.h, ...?

settings.h:
Code:
class Settings
{
  private:
    char* db;
    char* server;
    char* user;
    char* passwd;
  public:
    Settings();
    char* getDB();
};
settings.cpp:
Code:
#include "settings.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>

using namespace std;

Settings::Settings()
{
  db = "testadmin";
  server = "localhost";
  user = "xxx";
  passwd = "xxx";
}

char* Settings::getDB()
{
  return db;
}
first_test.cpp:
Code:
#include <iostream>
#include <mysql++.h>
#include <stdlib.h>
#include "settings.h"

using namespace std;

int main(int argc, char* argv[])
{
  Settings::Settings s;
  mysqlpp::Connection conn(false);
  if(conn.connect(s.getDB(), "localhost", "xxx", "xxx"))
  {
    mysqlpp::Query query = conn.query("select ...");
    if(mysqlpp::StoreQueryResult res = query.store()) {
      cout << "phone_number of user 1 is " << res[0][0] << "\n";
    }
    else {
      cerr << "Failed to get phonenumber from user 1: " << query.error() << "\n";
      return 1;
    }
    return 0;
  }
  else {
    cerr << "DB connection failed: " << conn.error() << "\n";
    return 1;
  }
}
Makefile:
Code:
CXX := g++
CXXFLAGS := -I/usr/include/mysql -I/usr/include/mysql++
LDFLAGS := -L/usr/lib -lmysqlpp -lnsl -lz -lm
EXECUTABLE := main

 all: first_test

  clean:
        rm -f $(EXECUTABLE) *.o
Beim compilieren bekommen ich immer einen undefined reference to fehler:
Code:
# make
g++ -I/usr/include/mysql -I/usr/include/mysql++  -L/usr/lib -lmysqlpp -lnsl -lz -lm first_test.cpp  -o first_test
/tmp/ccZp8kS2.o: In function `main':
first_test.cpp:(.text+0xa3): undefined reference to `Settings::Settings()'
first_test.cpp:(.text+0xc1): undefined reference to `Settings::getDB()'
collect2: ld gab 1 als Ende-Status zurück
make: *** [first_test] Fehler 1

uligerhardt 15. Dez 2009 09:42

Re: c++: undefined reference to ...
 
Du musst make dazu bringen, auch settings.cpp zu kompilieren und zu linken. Meine make-Kenntnisse sind etwas eingerostet, aber du musst wohl irgendwie settings.o als Abhängigkeit für first_test definieren.

HTH,
Uli.

geisi 15. Dez 2009 10:10

Re: c++: undefined reference to ...
 
danke, ich habs jetzt mit folgendem befehl geschafft:
Code:
g++ -I /usr/include/mysql -I /usr/include/mysql++ -L /usr/lib -lmysqlpp -lnsl -lz -lm -o first_testi first_test.cpp settings.cpp

uligerhardt 15. Dez 2009 10:26

Re: c++: undefined reference to ...
 
Zitat:

Zitat von geisi
danke, ich habs jetzt mit folgendem befehl geschafft:
Code:
g++ -I /usr/include/mysql -I /usr/include/mysql++ -L /usr/lib -lmysqlpp -lnsl -lz -lm -o first_testi first_test.cpp settings.cpp

Das geht natürlich auch. Aber wenn du schon ein Makefile hast, solltest du versuchen, das anzupassen.
Dazu müsstest du IIRC eine Zeile wie
Zitat:

first_test: settings.cpp
oder so einbauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz