Ĺadny brzuch
Do tej pory pisałem proste programiki na zaliczenia w devcpp. Nie było problemów. Jednak postanowiłem spróbować skompilować je pod Linuxem. W kdevelop stworzyłem nowy projekt c++ i stworzyłem odpowiednie pliki (zahaczona opcja "Dodaj do projektu")i:
main.cpp:
#include <iostream> #include "defs.h" // i instrukcja main
defs.h - deklaracje funkcji
#ifndef _DEFS_H_ #define _DEFS_H_ using namespace std; double** create_matrix(int width=3, int height=3); void show_matrix(double** matrix, int width, int height); void fullfil_matrix(double** matrix, int width, int height, double number); #endif
defs.cpp - ciała funkcji.
Przy próbie zbudowania projektu:
main.cpp:(.text+0x172): undefined reference to `create_matrix(int, int)'
main.cpp:(.text+0x1e6): undefined reference to `fullfil_matrix(double**, int, int, double)'
main.cpp:(.text+0x20d): undefined reference to `show_matrix(double**, int, int)'
Czy może mi ktoś powiedzieć co robie źle - nie są to błędy C++ bo w devie sie kompiluje, a nie używam niczego co by ograniczało mnie do Windowsa. Wydaje mi się, że to coś z linkerem...
A dolaczyles do projektu plik .cpp w ktorym masz definicje tych funkcji?
Definicje są w pliku defs.cpp i wydaje mi się że go dołączyłem, gdzie to mogę sprawdzić ?
==
Znalazłem winowajce. Tak jak przypuszczałem to wina linkera. Nie linkuje automatycznie wszystkich plików.
Pod konsolą mogę napisac: g++ main.cpp funkcje.cpp
i się kompiluje w porządku - a jak to zautomatyzować w Kdevelop ?
Użytkownik KrzysieQ edytował ten post 23 październik 2007, 22:01
hmmm... Instrukcja preprocesora
#include "defs.cpp"
Nic innego mi teraz nie przychodzi ^^
hmmm... Instrukcja preprocesora
#include "defs.cpp"
Nic innego mi teraz nie przychodzi ^^
To jest idealny przyklad jak nie korzystac z include. Nie wiem jak jest w kdevelop, ale to na 95% to ze nie dodales defs.cpp do projektu
main.cpp:
#include "defs.cpp"
defs.cpp
#include "defs.h"
I działa :)
thx
:/ To juz lepiej zrob implementacje tych defs w .h bo tak sie nie robi jak zrobiles.
Już myślałem, że zrozumiałem o co chodzi a tu :/
Przykład z wikipedii z wykorzystania biblioteki boost:
#include <boost/thread/thread.hpp> #include <iostream> using namespace std; void hello_world() { cout << "Witaj świecie, jestem wątkiem!" << endl; } int main(int argc, char* argv[]) { // utwórz nowy wątek wywołujący funkcję "hello_world" boost::thread my_thread(&hello_world); // poczekaj na zakończenie wątku my_thread.join(); return 0; }
Oczywiście bibliotekę mam zainstalowaną poprawnie. A otrzymuje:
main.cpp:(.text+0x107): undefined reference to `boost::thread::thread(boost::function0<void, std::allocator<boost::function_base> > const&)' main.cpp:(.text+0x137): undefined reference to `boost::thread::join()' main.cpp:(.text+0x13f): undefined reference to `boost::thread::~thread()' main.cpp:(.text+0x1bf): undefined reference to `boost::thread::~thread()'
Co tym razem źle robie ? Pisane w kDevelop.
Użytkownik KrzysieQ edytował ten post 27 listopad 2007, 20:15
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
main.cpp:
#include <iostream> #include "defs.h" // i instrukcja main
defs.h - deklaracje funkcji
#ifndef _DEFS_H_ #define _DEFS_H_ using namespace std; double** create_matrix(int width=3, int height=3); void show_matrix(double** matrix, int width, int height); void fullfil_matrix(double** matrix, int width, int height, double number); #endif
defs.cpp - ciała funkcji.
Przy próbie zbudowania projektu:
main.cpp:(.text+0x172): undefined reference to `create_matrix(int, int)'
main.cpp:(.text+0x1e6): undefined reference to `fullfil_matrix(double**, int, int, double)'
main.cpp:(.text+0x20d): undefined reference to `show_matrix(double**, int, int)'
Czy może mi ktoś powiedzieć co robie źle - nie są to błędy C++ bo w devie sie kompiluje, a nie używam niczego co by ograniczało mnie do Windowsa. Wydaje mi się, że to coś z linkerem...
A dolaczyles do projektu plik .cpp w ktorym masz definicje tych funkcji?
Definicje są w pliku defs.cpp i wydaje mi się że go dołączyłem, gdzie to mogę sprawdzić ?
==
Znalazłem winowajce. Tak jak przypuszczałem to wina linkera. Nie linkuje automatycznie wszystkich plików.
Pod konsolą mogę napisac: g++ main.cpp funkcje.cpp
i się kompiluje w porządku - a jak to zautomatyzować w Kdevelop ?
Użytkownik KrzysieQ edytował ten post 23 październik 2007, 22:01
hmmm... Instrukcja preprocesora
#include "defs.cpp"
Nic innego mi teraz nie przychodzi ^^
hmmm... Instrukcja preprocesora
#include "defs.cpp"
Nic innego mi teraz nie przychodzi ^^
To jest idealny przyklad jak nie korzystac z include. Nie wiem jak jest w kdevelop, ale to na 95% to ze nie dodales defs.cpp do projektu
main.cpp:
#include "defs.cpp"
defs.cpp
#include "defs.h"
I działa :)
thx
:/ To juz lepiej zrob implementacje tych defs w .h bo tak sie nie robi jak zrobiles.
Już myślałem, że zrozumiałem o co chodzi a tu :/
Przykład z wikipedii z wykorzystania biblioteki boost:
#include <boost/thread/thread.hpp> #include <iostream> using namespace std; void hello_world() { cout << "Witaj świecie, jestem wątkiem!" << endl; } int main(int argc, char* argv[]) { // utwórz nowy wątek wywołujący funkcję "hello_world" boost::thread my_thread(&hello_world); // poczekaj na zakończenie wątku my_thread.join(); return 0; }
Oczywiście bibliotekę mam zainstalowaną poprawnie. A otrzymuje:
main.cpp:(.text+0x107): undefined reference to `boost::thread::thread(boost::function0<void, std::allocator<boost::function_base> > const&)' main.cpp:(.text+0x137): undefined reference to `boost::thread::join()' main.cpp:(.text+0x13f): undefined reference to `boost::thread::~thread()' main.cpp:(.text+0x1bf): undefined reference to `boost::thread::~thread()'
Co tym razem źle robie ? Pisane w kDevelop.
Użytkownik KrzysieQ edytował ten post 27 listopad 2007, 20:15