Ich baue ein C++ Projekt auf meinem Ubuntu 64bit System mit einem bereitgestellten Makefile
, und dieses Projekt bietet auch eine API-Bibliothek für Entwickler.Suche nach "undefinierten" Referenzen in einem C/C++ Projekt
Die Kompilation erfolgreich war, keine Fehler überhaupt, aber wenn ich versuche, in meiner Dateien die API-Bibliotheken in der „api“ Ordner vorgesehen sind, g++
klagt dann über undefinierte Referenzen.
Es ist kein Problem mit Abhängigkeiten (ich habe das Projekt bereits erfolgreich erstellt), in der Tat sind die fehlenden Referenzen über Klassen und Funktionen, die vom Projekt bereitgestellt werden, aber sie sind in bestimmten (Sub-) Ordnern Ich weiß, in welchen .so Dateien und g++
sie nicht finden, wahrscheinlich weil sie nicht wissen, dass sie sich in diesen spezifischen Unterordnern befinden. Ich glaube, ich bin etwas fehlt oder ich tue etwas falsch in der Regel, wenn sie versuchen, die Bibliotheken in einem Projekt zu nutzen
Es ist nicht das erste Mal, dies geschieht, wenn APIs von jedes Projekt zu verwenden versuchen, dann.
Insbesondere das Hauptproblem ist, dass ich weiß nicht, wie man den Compiler zu sagen, wo einige Klassen oder Datenstrukturen deklariert sind, und darüber hinaus weiß ich nicht, wie zu finden sie, um zu wissen, wo sie sind.
Regel eine Abhilfe, die ich dieses Problem zu vermeiden verwenden ist make install
(als root oder mit sudo
) zu laufen, so dass Bibliotheken und APIs in Standardordnern installiert sind (wie /usr/include
oder /usr/lib
) und wenn ich diesen thend tun kann ich schließen die API-Bibliotheken verwenden #include <library>
, aber in diesem letzten Fall hat es auch nicht funktioniert, weil vielleicht einige erforderliche Dateien mit den nicht gefundenen Klassen/Strukturen nicht richtig in den richtigen Ordnern im System installiert sind.
Eine andere Problemumgehung, die ich manchmal verwendet, ist zu versuchen, alle Projektdateien in den gleichen Ordner zu legen, anstatt die Projektordnerstruktur zu verwenden, aber das ist eindeutig nicht gut! :-)
Aber ich bemerkte, dass einige andere Leute die APIs verwenden, verwaltet dann anscheinend sie einen Weg zu finden, um die Dateien, die „undefiniert“ Referenzen und sie in der Zusammenstellung wissen enthalten.
Dann meine allgemeine Frage ist: gegeben ein „klassisches“ C++ Projekt basierte auf „Makefile“ Dateien und mit üblichen Ordnernamen wie src
, lib
, build
, bin
usw., wenn ich will, C++ Dateien schreiben mit die vom Projekt bereitgestellten Bibliotheken, aber der Compiler beschwert sich über undefinierte Referenzen, Wie kann ich die Dateien (.so oder .o oder .cpp) finden, die solche Referenzen enthalten? Gibt es ein Werkzeug, um sie zu finden? Und Wie kann ich dem Compiler sagen, wo sie sind? Sollte ich eine Befehlszeilenoption für g++
verwenden oder sollte ich das Makro #include
auf eine clevere Weise verwenden?
PS Ich habe auch versucht, das pkc-config
Linux-Tool zu verwenden, um richtige Optionen für die Kompilierung zu bekommen, und sie waren verfügbar, aber der Compiler beschwert sich immer noch über die undefinierten Referenzen.
Einige weitere degails über das Projekt habe ich versucht:
Für interessierte Personen einen Link zum Projekt unter: https://github.com/dreal/dreal3
Und Anweisungen, wie es zu bauen: http://dreal.github.io/download/
Ich in der Regel nur STRG + UMSCHALT + F und kopieren Sie und fügen Sie den Namen des Symbols, dass der Compiler beschwert über die findet mich das Symbol. Jede IDE sollte einige Funktionen haben, um nach Symbolen zu suchen, aber im Notfall [find/grep] (https://stackoverflow.com/questions/8144501/grep-l-is-not-working-for-a-folder-with -sub-folders # 8144580). – nwp
Meiner Erfahrung nach ist dies völlig projektabhängig. Sie müssen den Projekt-Build-Prozess ein wenig steigern, dann nach dem fehlenden Teil suchen und Backwords verwenden, um herauszufinden, wie darauf zugegriffen werden soll. find/grep ist dreckig und rohe Gewalt und manchmal der beste Startpunkt. Suchen Sie nicht nur nach/grep, sondern auch nach ack. https://beyondgrep.com/ – Richard
ctags generiert eine TAGS-Datei, die den Speicherort der Definition für jedes Symbol angibt. – stark