Von VoidLinux nach NetBSD (9.2) als Desktop: Thema 1: Bauen von eigenen Projekten

Clas

Well-Known Member
Hallo,

ich wollte zwar erst am Wochenende weitermachen. Aber heute nach Feierabend
habe ich dann noch etwas gemacht was mich interessiert hat und was für mich
wichtig ist. Nämlich das ich meine eigenen Projekte auch unter NetBSD
kompilieren und ans laufen bekomme, debuggen kann usw.

Ich habe ein sehr kleines Projekt von mir ausgecheckt und mal versucht einfach
zu bauen. Ich habe die benötigte Library und gcc10 installiert mit pkgin und dann
einfach mal versucht zu bauen mit den installierten Make von NetBSD.
Dieses Projekt https://gitlab.com/Onnebrink/life ist sehr klein und ist
normalerweise kein Problem das zu bauen unter Debian, Ubuntu und auch
VoidLinux ohne Anpassungen.

Ergebnis:

1. Versuch, ohne jegliche Anpassung des Makefile aus dem Repo.
Ok, gcc10 nur zu installieren mit pkgin sorgt nicht automatisch
dafür das gcc10 zum StandardCompiler auf dem System wird.
Das kann man verstehen und nicht weiter tragisch.

1628625058567.png


2. Versuch mit Anpassung von Makefile
g++ --> /usr/pkg/gcc10/bin/g++
ok, das Paket smfl mit pkgin zu installieren sorgt nicht dafür dass SFML im StandardIncludeVerzeichnis landet des Systems. Auch eine Abweichung
gegenüber allen LinuxSystemen die ich so kenne

1628625409134.png


3. Versuch mit Anpassung des Makefiles mit via pkg-configs ermittelten Flags für Compiler und Linker:
Ertstmal die entsprechenden Flags ermitteln: Interessant was dabei rauskommt:

1628625815166.png

Aufruf mit entsprechend angepasssten Makefile:
1628626044481.png

Zwei Warnungen tauchen auf wegen möglichen Conflict bei den standard c++ libs und das eine veraltete interne Funktion gelinkt wurde.
Aber es wurde eine Binary erzeugt:
1628626248956.png

Seltsam irgenwie scheint mein System noch icht überall die richtige Zeit zu haben.Mal schauen was das File so beinhaltet:

1628626433892.png


Test. (Kann man es aufrufen?)

1628626588661.png


Schade :confused:

Leider nicht so ganz erfolgreich. Aber ich mach mal Schluss für heute.

Schönen Abend noch

clas
 

Anhänge

  • 1628624890985.png
    1628624890985.png
    80,6 KB · Aufrufe: 167
Ich habe keine Ahnung von NetBSD und noch viel weniger von Programmieren und dem Lesen der ausgeworfenen Fehlermeldungen. Bei FreeBSD (iirc auch bei OpenBSD) wird jedoch ein eigenes "BSD-make" mitgeliefert, das nicht kompatibel zu "GNUmake" ist. Vielleicht ist das auch bei NetBSD so und es reicht aus, dass du gmake installierst und nicht make sondern gmake aufrufst.

HTH
 
Ein ähnliches Problem hatte ich auch bei Projekten die von Linux zu FreeBSD umgezogen sind. Wenn etwas CrossPlarform ist, nutze ich mittlerweile immer CMake. Es handhabt die Platformabhängigkeiten recht gut. Bei FreeBSD setze ich immer den rpath.


Code:
######################################################################
# OS
######################################################################
IF (UNIX)
    MESSAGE(STATUS "This is UNIX")
    ADD_DEFINITIONS(-DUNIX)

     ############################################################################
    # RPATH
    # https://cmake.org/Wiki/CMake_RPATH_handling
    ############################################################################
    # use, i.e. don't skip the full RPATH for the build tree
    SET(CMAKE_SKIP_BUILD_RPATH  FALSE)

    # when building, don't use the install RPATH already
    # (but later on when installing)
    SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)

    SET(CMAKE_INSTALL_RPATH "${TARGET_LIB_PATH}")

    # add the automatically determined parts of the RPATH
    # which point to directories outside the build tree to the install RPATH
    SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)


    # the RPATH to be used when installing, but only if it's not a system directory
    LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${TARGET_LIB_PATH}" isSystemDir)
    IF("${isSystemDir}" STREQUAL "-1")
        SET(CMAKE_INSTALL_RPATH "${TARGET_LIB_PATH}")
    ENDIF("${isSystemDir}" STREQUAL "-1")

    IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
        MESSAGE(STATUS "This is Linux")
        ADD_DEFINITIONS(-DLINUX)

        SET(LINUX TRUE)
        SET(FREEBSD FALSE)
        SET(DARWIN FALSE)

    ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
    IF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
        MESSAGE(STATUS "This is FreeBSD")
        ADD_DEFINITIONS(-DFREEBSD)

        SET(LINUX FALSE)
        SET(FREEBSD TRUE)
        SET(DARWIN FALSE)

    ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
    IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
        MESSAGE(STATUS "This is Darwin")
        ADD_DEFINITIONS(-DDARWIN)

        SET(LINUX FALSE)
        SET(FREEBSD FALSE)
        SET(DARWIN TRUE)

    ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
ENDIF (UNIX)
 
Zu dem Konflikt der stdlib: Das ist die C++ ABI des gnu Compilers. Die System libstdc++ hat eine andere ABI als die libstdc++ des gcc10. SFML wurde mit dem Default Compiler des Systems übersetzt und verlinkt entsprechend seine libstdc++ in seine Kompilate.

 
Dazu noch ein weiterer Tipp:
Versuche bitte, Kommandozeilenausgaben als Text hier einzustellen, nicht als Bild.
Ein Bild ist nicht durchsuchbar und somit für jemanden, der ein ähnliches Problem hat, nicht auffindbar.

Statt "exa" würde ich an deiner Stelle auch einfach nur ls nutzen, das gibt es nämlich auf jedem UNIX/Linux.
Desweiteren kannst du prüfen, welche Bibliotheken nicht vorhanden sind, in dem du das Tool ldd benutzt:

Code:
ldd ./life

Rob
 
Hi,

so in der Mittagspause mal etwas weiter gemacht:
Das mit den nicht gefunden Libraries beim ausführen war leicht zu beheben:
Dann kommt aber ein SEGFAULT:
Dann habe ich das mal im GDB gestartet:
1628680682172.png


Dann habe ich mal etwas gesucht: Und folgendes recht aktuelles gefunden. Wo zumindest das gleiche Problem tangiert wird denke ich:


Oder zumindest im selben Bereich:

Ich versuche dass heute Abend noch einmal.

Vielen Dank für die Antworten bisher :)

clas
Die nächsten Posts werden dann keine Bilder mehr beinhalten..... :)
 
Hallo Rob:

/m/p/P/m/life   *  trg  ldd ./life Wed Aug 11 13:23:47 2021
./life:
-lsfml-graphics.2.5 => /usr/pkg/lib//libsfml-graphics.so.2.5
-lsfml-window.2.5 => /usr/pkg/lib//libsfml-window.so.2.5
-lsfml-system.2.5 => /usr/pkg/lib//libsfml-system.so.2.5
-lpthread.1 => /usr/lib/libpthread.so.1
-lc.12 => /usr/lib/libc.so.12
-lstdc++.9 => /usr/lib/libstdc++.so.9
-lm.0 => /usr/lib/libm.so.0
-lgcc_s.1 => /usr/lib/libgcc_s.so.1
-lusbhid.1 => /usr/lib/libusbhid.so.1
-lX11.7 => /usr/X11R7/lib/libX11.so.7
-lxcb.2 => /usr/X11R7/lib/libxcb.so.2
-lXau.7 => /usr/X11R7/lib/libXau.so.7
-lXdmcp.7 => /usr/X11R7/lib/libXdmcp.so.7
-lXrandr.3 => /usr/X11R7/lib/libXrandr.so.3
-lXrender.2 => /usr/X11R7/lib/libXrender.so.2
-lXext.7 => /usr/X11R7/lib/libXext.so.7
-lGL.3 => /usr/X11R7/lib/libGL.so.3
-lXxf86vm.2 => /usr/X11R7/lib/libXxf86vm.so.2
-lXfixes.4 => /usr/X11R7/lib/libXfixes.so.4
-lXdamage.2 => /usr/X11R7/lib/libXdamage.so.2
-lglapi.1 => /usr/X11R7/lib/libglapi.so.1
-ldrm.3 => /usr/X11R7/lib/libdrm.so.3
-lpci.2 => /usr/lib/libpci.so.2
-lX11-xcb.1 => /usr/pkg/lib//libX11-xcb.so.1
-lxcb-dri2.0 => /usr/pkg/lib//libxcb-dri2.so.0
-lxcb-glx.0 => /usr/pkg/lib//libxcb-glx.so.0
-lexpat.2 => /usr/lib/libexpat.so.2
-lGLU.3 => /usr/X11R7/lib/libGLU.so.3
-lfreetype.19 => /usr/X11R7/lib/libfreetype.so.19
-lz.1 => /usr/pkg/lib//libz.so.1
-lbz2.1 => /usr/lib/libbz2.so.1
-lstdc++.7 => /usr/pkg/gcc10//lib/./libstdc++.so.7
/m/p/P/m/life   *  trg  Wed Aug 11 13:23:57 2021
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
entschuldigt bitte wenn ich noch nicht ganz Boardkonform bin. Ich habe mir eure NetiquetteRegeln zwar durchgelesen. Aber so ganz konform
verhalte ich mich dann anscheinend noch nicht. bzw. verstehe noch nicht so ganz wie eure Regeln hier so sind. Also, Moderatoren des Boards
bitte gibt mir ruhig einen Hint wenn ich etwas falsch gemacht habe. Nicht das ich schon nur nach 2 Post rausgeschmissen werde. Ich muss den
ganzen Tag in englisch kommunizieren. Dann finde es wirklich schön das hier Foren sind wo man sich über technische Fragen eines OS in deutsch
austauschen kann. :)
Viele Grüße
Clas
 
Zurück
Oben