Ich entwickle mit Code::Blocks. Das Programm definiert einen thread array[n]. Nachdem die baugleichen Threads, die ich mir selber ausgedacht habe, alle mit der Build Message: "Nicht definierter Verweis auf pthread_create" vom GNU GCC Compiler abbrechen, habe ich Beispiele aus Lehrbüchern abgeschrieben. Doch auch die melden diesen dubiosen Fehler. Also habe ich nach dem Fehler selbst gegooglelt und siehe da seit 2012 fragen regelmäßig Leute nach diesem Fehler (so wie ich das interpretiere nutzen die Entwickler verschiedene IDEs auf verschiedenen Betriebssystemen). Antwortende Gurus schieben die Fehlerursache zum Teil Code::Blocks zu (es würden nicht die richtigen Compiler- und Linkeroptionen angezogen). Ok, falls das wahr ist (Code::Blocks musste dann seinen Fehler über vier Jahre bis zur Version 16.01 standhaft verteidigen), kann ich dann meinen Thread-Array zum Beispiel mit CodeLite gleichzeitig Linux, Windows und OS X implementieren?
C++: Nicht definierter Verweis auf pthread_create
Anmeldungsdatum: Beiträge: 170 Wohnort: München |
|
||||
Anmeldungsdatum: Beiträge: 6345 Wohnort: Hamburg |
Also Code::Blocks kenne ich jetzt nicht wirklich.
Da könnte was drann sein, denn ptrread_... ist C. C++ hat seit C++(11) seine eigene Tread Klasse. Aber ich verwende z.T. auch noch ptreads mit C++, allerdings mit Makefile's. Vielleicht hilft auch Java Style Thread Class in C++ weiter. |
||||
Anmeldungsdatum: Beiträge: 229 |
Wie Dakuan schon sagt: Seit C++11 gibt’s plattformunabhängige Threads. Edit: Link zur C++11-Thread-Dokumentation gefixt. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 170 Wohnort: München |
Also ganz exklusiv für euch:
Ich seh da nur C++! Doch erscheint nach dem Build das gesperrte thread-Modul (aus C++, in welchem die Zeile 133 rot markiert ist) und folgende Message (die nur abgetippt werden kann, weil Code::Blocks 16.01 nicht mehr reagiert):
Wie gesagt Code::Blocks stürtzt beim Build ab. Das Programm stammt aus C++11 multithreading tutorial - part 2, welches unter https://solarianprogrammer.com/2012/02/27/cpp-11-thread-tutorial-part-2/ zu finden ist. |
||||
Anmeldungsdatum: Beiträge: 229 |
Okay, das sah so aus, als würdest du Zum Problem: |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 170 Wohnort: München |
Nochmal die eigentliche Frage: Kann mir jemand sagen, ob ich das Problem los bin, wenn ich das IDE wechsle? |
||||
Anmeldungsdatum: Beiträge: 11180 Wohnort: München |
Ich kann nur generell empfehlen das erst mal zu Fuß zu lernen, wie man ein Makefile schreibt und Compiler-Fehler behebt. Dazu brauchst du nur einen Texteditor und eine Shell. Wenn du das mal prinzipiell verstanden hast, kannst du dir die Arbeit von einer IDE abnehmen lassen (und weißt, an welchen Stellen du eingreifen musst, wenn die Automatik versagt). |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 170 Wohnort: München |
Das ist keine Antwort auf meine Frage, sondern ein unqualifizierter Kommentar. Zu deiner Info ich benutze C seit 1984, C++ seit 1993 und zwar genau dann, wenn mir keine Alternative bleibt. Glaub mir, ich habe keine Lust darauf noch ein Make zu tippen, nur weil wieder einer eine schlechte IDE als NonPlusUltra verkauft. Außerdem mag ich das Make n-mal überarbeiten, wenn ich auf andere Plattformen portiere. Hast Du mal ADA programmiert? Dann weißt Du ja wie das mit den Threads in der Entwicklung wirklich geht. Also nochmal: Ist das Problem weg, wenn ich von Code::Blocks auf eine Multiplattform-IDE wie zum Beispiel CodeLite wechsle? Ich möchte vermeiden selber viele von diesen IDEs zu probieren. |
||||
Anmeldungsdatum: Beiträge: 11180 Wohnort: München |
Ich will dir keine IDE verkaufen, sondern nur klar machen, dass du den Linker-Fehler los wirst, wenn du die Argumente, die du dem Linker mitgibst, entsprechend anpasst - und nicht durch IDE-Hopping. Meine Vermutung ist, dass du das im Tutorial für gcc >= 4.7.x als erforderlich genannte -------------- Build: Debug in C++ Threading Example (compiler: GNU GCC Compiler)--------------- g++ -Wall -std=c++11 -fexceptions -pthread -g -c "/home/user/cpp/C++ Threading Example/main.cpp" -o obj/Debug/main.o g++ -o "bin/Debug/C++ Threading Example" obj/Debug/main.o obj/Debug/main.o: In Funktion `std::thread::thread<void (&)(int), int&>(void (&)(int), int&)': /usr/include/c++/6/thread:133: Nicht definierter Verweis auf `pthread_create' collect2: error: ld returned 1 exit status Process terminated with status 1 (0 minute(s), 0 second(s)) 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) Wenn man es mit -------------- Build: Debug in C++ Threading Example (compiler: GNU GCC Compiler)--------------- g++ -Wall -std=c++11 -fexceptions -g -c "/home/user/cpp/C++ Threading Example/main.cpp" -o obj/Debug/main.o g++ -o "bin/Debug/C++ Threading Example" obj/Debug/main.o -pthread Output file is bin/Debug/C++ Threading Example with size 119.38 KB Process terminated with status 0 (0 minute(s), 0 second(s)) 0 error(s), 0 warning(s) (0 minute(s), 0 second(s)) |
||||
Anmeldungsdatum: Beiträge: 6345 Wohnort: Hamburg |
In C programmiere ich etwa genau so lange wie Du. Dabei hatte ich anfangs auch immer komplett-IDEs verwendet (Turbo-C [Atari-st,PC], Latice-C [Atari], Borland-C [PC]). Daurch war ich sehr verwöhnt und hatte dann mit Linux einige Probleme. C++ mache ich erst seit etwa 3 Jahren. Der Punkt ist, wenn alle Komponenten aus einer Hand kommen, ist es für eine IDE kein großes Problem eine funktionierende Make-Prozedur zu bauen. Aber sobald eine IDE unabhängig vom Compiler und den installierten Bibliotheken entwickelt wird, geht das nicht mehr. Es wird immer mal Situationen geben, wo Pfade zu Libs oder Include-Files angepasst werden müssen. In der von mir verwendeten IDE (Geany) kann man das im Projekt einstellen oder gleich ein eigenes Makefile verwenden. Ich verwende z.B. als Toolkit FLTK, bei dem alle zugehörigen Libs in eigenen Unterverzeichnissen liegen, was man dem Gespann Compiler/Linker extra mitteilen muss. Es gibt aber auch Entwickler, die unterschiedliche Versionen von Libs testen müssen, da muss man dann auch die Pfade extra angeben. Ich gehe daher davon aus, das jede ordentliche IDE irgendwo die Möglichkeit bietet, solche individuellen Einstellungen vorzunehmen. Jedenfalls sehe ich die Gefahr, das Du wegen solcher Prinzip bedingter Unzulänglichkeiten, mit anderen IDEs die gleichen Probleme bekommst, wenn Du diese Einstellmöglichkeiten nicht nutzt. |