BSDForen.de  

Zurück   BSDForen.de > FreeBSD > FreeBSD - Anwendungen und Ports

Antwort
 
Themen-Optionen Thema bewerten Ansicht
Alt 15.08.2012, 19:46   #1
CrimsonKing
Der blutrote König
 
Benutzerbild von CrimsonKing
 
Registrierungsdatum: Mar 2012
Beiträge: 246
sysinfo.h: undefined reference

Tach,

ich portiere gerade mal wieder. Diesmal eine Anwendung, die die sysinfo.h benötigt.

libsysinfo als Abhängigkeit einzurichten ist kein Problem, aber wie sage ich CMake, wo es nach der sys/sysinfo.h suchen soll? libsysinfo hat die in /usr/local/include/ installiert, aber es findet sie nicht oder kann sie einfach nicht richtig benutzen:

Zitat:
Linking CXX executable nomacs
CMakeFiles/nomacs.dir/src/DkUtils.cpp.o: In function `nmc::DkMemory::getFreeMemory()':
DkUtils.cpp:(.text+0x68): undefined reference to `sysinfo'
CMakeFiles/nomacs.dir/src/DkUtils.cpp.o: In function `nmc::DkMemory::getTotalMemory()':
DkUtils.cpp:(.text+0xc8): undefined reference to `sysinfo'
*** Error code 1
Jemand Erfahrungen?

(Bei Bedarf geb' ich auch gern das Makefile raus.)
__________________
"Was war das Ziel der Linuxgemeinde - Windows zu ersetzen?"
-- Bill Joy
CrimsonKing ist offline   Mit Zitat antworten
Alt 15.08.2012, 20:08   #2
Kamikaze
Parasprite
 
Benutzerbild von Kamikaze
 
Registrierungsdatum: May 2005
Ort: /Earth/Europe/Germany/Karlsruhe
Beiträge: 9.661
Kamikaze eine Nachricht über ICQ schicken Kamikaze eine Nachricht über MSN schicken
Er sagt nichts davon, dass er einen Header nicht einbinden kann. Aber keiner der eingebundenen Header enthält eine Funktion Namens sysinfo.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything.
Kamikaze ist gerade online   Mit Zitat antworten
Alt 15.08.2012, 20:10   #3
CrimsonKing
Der blutrote König
 
Benutzerbild von CrimsonKing
 
Registrierungsdatum: Mar 2012
Beiträge: 246
Stimmt, ist 'ne struct in der sysinfo.h. Sollte er aber trotzdem kennen?
__________________
"Was war das Ziel der Linuxgemeinde - Windows zu ersetzen?"
-- Bill Joy
CrimsonKing ist offline   Mit Zitat antworten
Alt 15.08.2012, 20:51   #4
Kamikaze
Parasprite
 
Benutzerbild von Kamikaze
 
Registrierungsdatum: May 2005
Ort: /Earth/Europe/Germany/Karlsruhe
Beiträge: 9.661
Kamikaze eine Nachricht über ICQ schicken Kamikaze eine Nachricht über MSN schicken
Ja, wenn der include da ist schon.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything.
Kamikaze ist gerade online   Mit Zitat antworten
Alt 15.08.2012, 20:53   #5
CrimsonKing
Der blutrote König
 
Benutzerbild von CrimsonKing
 
Registrierungsdatum: Mar 2012
Beiträge: 246
Warum tut er es dann nicht?
__________________
"Was war das Ziel der Linuxgemeinde - Windows zu ersetzen?"
-- Bill Joy
CrimsonKing ist offline   Mit Zitat antworten
Alt 15.08.2012, 21:00   #6
Kamikaze
Parasprite
 
Benutzerbild von Kamikaze
 
Registrierungsdatum: May 2005
Ort: /Earth/Europe/Germany/Karlsruhe
Beiträge: 9.661
Kamikaze eine Nachricht über ICQ schicken Kamikaze eine Nachricht über MSN schicken
Kann ich dir nicht sagen. Man kann weder den Compileraufruf noch den Code von hier aus erkennen.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything.
Kamikaze ist gerade online   Mit Zitat antworten
Alt 15.08.2012, 21:10   #7
CrimsonKing
Der blutrote König
 
Benutzerbild von CrimsonKing
 
Registrierungsdatum: Mar 2012
Beiträge: 246
Die fragliche Funktion ist:

Code:
double DkMemory::getFreeMemory() { double mem = -1; #ifdef Q_WS_WIN MEMORYSTATUSEX MemoryStatus; ZeroMemory(&MemoryStatus, sizeof(MEMORYSTATUSEX)); MemoryStatus.dwLength = sizeof(MEMORYSTATUSEX); if (GlobalMemoryStatusEx(&MemoryStatus)) { mem = MemoryStatus.ullAvailPhys; } #elif defined Q_WS_X11 struct sysinfo info; if (!sysinfo(&info)) mem = info.freeram; #elif defined Q_WS_MAC // TODO: could somebody (with a make please add the corresponding calls? #endif // convert to MB if (mem > 0) mem /= (1024*1024); return mem; }
__________________
"Was war das Ziel der Linuxgemeinde - Windows zu ersetzen?"
-- Bill Joy
CrimsonKing ist offline   Mit Zitat antworten
Alt 16.08.2012, 06:40   #8
Tron
Registered User
 
Registrierungsdatum: Apr 2004
Beiträge: 268
sysinfo.h ist da, wird gefunden und auch in deren Inhalt wird die Deklaration der Funktion sysinfo() gefunden. Das zeigt sich daran, dass es keine Fehler- oder Warnmeldung vom Übersetzer gab.
Das da oben ist eine Fehlermeldung vom Binder, dass er die Definition der Funktion nicht findet. Sprich, die notwendige Bibliothek wurde nicht als Argument beim Binden übergeben: -lsysinfo (evtl. noch -L/usr/local/lib, damit der Binder in dem Verzeichnis nach der Bibliothek sucht).
Header enthalten nur die Deklarationen von Funktionen (modulo inline-Funktionen). Sie sagen so etwas wie: Es gibt eine Funktion mit Namen $NAME, sie hat Parameter mit diesen und jenen Typen und liefert ein Resultat von jenem Typ. Die Implementierung einer Funktion befindet sich in einer Bibliotheksdatei (üblicherweise lib$NAME.a oder lib$NAME.so).
Tron ist offline   Mit Zitat antworten
Alt 16.08.2012, 08:04   #9
CrimsonKing
Der blutrote König
 
Benutzerbild von CrimsonKing
 
Registrierungsdatum: Mar 2012
Beiträge: 246
Ah, ich war davon ausgegangen, dass die CMAKE-Scripte intelligent genug sind, vorhandene Bibliotheken automatisch zu erkennen. Ich sollte weniger mit Windows arbeiten.

Danke, werde ich nachher mal testen!
CrimsonKing ist offline   Mit Zitat antworten
Alt 16.08.2012, 09:13   #10
CrimsonKing
Der blutrote König
 
Benutzerbild von CrimsonKing
 
Registrierungsdatum: Mar 2012
Beiträge: 246
Scheint zu funktionieren - teilweise:

Zitat:
Linking CXX executable nomacs
/usr/local/lib/libsysinfo.so: undefined reference to `kvm_getprocs'
/usr/local/lib/libsysinfo.so: undefined reference to `kvm_open'
/usr/local/lib/libsysinfo.so: undefined reference to `kvm_close'
/usr/local/lib/libsysinfo.so: undefined reference to `kvm_getswapinfo'
/usr/local/lib/libsysinfo.so: undefined reference to `kvm_getloadavg'
*** Error code 1
Muss ich jetzt eine Abhängigkeit für die Abhängigkeit hinzufügen?
__________________
"Was war das Ziel der Linuxgemeinde - Windows zu ersetzen?"
-- Bill Joy
CrimsonKing ist offline   Mit Zitat antworten
Alt 16.08.2012, 09:31   #11
Kamikaze
Parasprite
 
Benutzerbild von Kamikaze
 
Registrierungsdatum: May 2005
Ort: /Earth/Europe/Germany/Karlsruhe
Beiträge: 9.661
Kamikaze eine Nachricht über ICQ schicken Kamikaze eine Nachricht über MSN schicken
Ja, so funktioniert das. Die korrekten CFLAGS für ihre Abhängigkeiten können sich build-Skripte in der Regel von pkgconf holen:

Für den Compiler:
# pkgconf --cflags glew
-I/usr/include/GL

Für den Linker:
# pkgconf --libs glew
-lGLEW

Edit:
Der Include Pfad oben ist übrigens falsch. Das wäre dann ein bug im graphics/glew port.
__________________
[ bsdlogo 2.0 - Wiki - Ports - LibreOffice Pakete - PM schreiben - kamikaze@bsdforen.de ]
Disclaimer: My posts represent my perception. Errors and incompleteness are to be expected, I deny any responsibility to know everything.
Kamikaze ist gerade online   Mit Zitat antworten
Alt 16.08.2012, 09:47   #12
CrimsonKing
Der blutrote König
 
Benutzerbild von CrimsonKing
 
Registrierungsdatum: Mar 2012
Beiträge: 246
Dazu dann zwei weitere Fragen:

1. Muss ich die Abhängigkeiten für die sysinfo.h auch in "meinem" oder in "deren" Makefile hinzufügen?
2. Wie finde ich heraus, welche Bilbiothek gern die kvm_-Funktionen hätte?
__________________
"Was war das Ziel der Linuxgemeinde - Windows zu ersetzen?"
-- Bill Joy
CrimsonKing ist offline   Mit Zitat antworten
Alt 16.08.2012, 10:47   #13
Yamagi
Possessed With Psi Powers
 
Benutzerbild von Yamagi
 
Registrierungsdatum: Apr 2004
Ort: Schleswig-Holstein
Beiträge: 6.602
Yamagi eine Nachricht über ICQ schicken
libkvm, Teil des Basissystems: "-lkvm"
__________________
Eure Tastatur verfügt nicht umsonst über zwei Shift-Tasten! Benutzt sie bitte, denn sonst ist es mir fast unmöglich euere Posts zu entziffern.

Yamagi ist offline   Mit Zitat antworten
Alt 16.08.2012, 10:49   #14
CrimsonKing
Der blutrote König
 
Benutzerbild von CrimsonKing
 
Registrierungsdatum: Mar 2012
Beiträge: 246
Das war jetzt eine sehr spezielle Antwort (danke!). Ich meinte: Wie ermittle ich, welche Funktion in welcher Bibliothek steckt?
__________________
"Was war das Ziel der Linuxgemeinde - Windows zu ersetzen?"
-- Bill Joy
CrimsonKing ist offline   Mit Zitat antworten
Alt 16.08.2012, 11:06   #15
Yamagi
Possessed With Psi Powers
 
Benutzerbild von Yamagi
 
Registrierungsdatum: Apr 2004
Ort: Schleswig-Holstein
Beiträge: 6.602
Yamagi eine Nachricht über ICQ schicken
Dafür gibt es keine generelle Antwort:
- Wenn die Bibliothek gut dokumentiert ist, über die Manpage. Hier z.B. "man kvm_getswapinfo". Leider sind viele Bibliotheken es nicht.
- Google nach dem Symbol fragen. Oft findet man damit schnell, welche Bibliothek es beinhaltet.
- Gefummel mit "strings | grep" auf das Verzeichnis mit den Blibliotheken.
__________________
Eure Tastatur verfügt nicht umsonst über zwei Shift-Tasten! Benutzt sie bitte, denn sonst ist es mir fast unmöglich euere Posts zu entziffern.

Yamagi ist offline   Mit Zitat antworten
Antwort


Dieses Thema betrachten zurzeit 1 Personen. (0 registrierte Benutzer und 1 Gäste)
 
Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus
Gehe zu

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
QT4.6.1 und KDE 4.3.5 kompiliert nicht "-fvisibility=hidden" error. grisu FreeBSD - Anwendungen und Ports 3 25.08.2010 07:44
VLC-Installation gescheitert goofy864 FreeBSD - Anwendungen und Ports 5 02.04.2009 08:39
Kernel build error: Undefined reference to critical system Sonic_Traveler FreeBSD - Allgemein 0 26.12.2004 12:52
kernel kompilieren: undefined references Herakles FreeBSD - Installation 9 21.05.2004 14:30
BSD 5.2 steigt bei eigenem Kernel aus cat1510 FreeBSD - Allgemein 16 30.01.2004 22:15


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr.


Powered by vBulletin (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.