habe eben spassenshalber eine .so mit einem befehl erstellt
sie war 22kb gross
habe dann ein testprogramm was nur darin bestand
den einen befehl mit importc zu importen und ihn dann aufgerufen
die exe ist auch 23kb, dann hab ich die .so aus dem verzeichnis genommen
die exe geht immer noch
kann es sein das die .so statisch gelinkt wird?
Kurze Frage zum .so import
-
- Beiträge: 965
- Registriert: 04.10.2004 18:42
- Computerausstattung: Amiga, LinuxMint, Windows7
- Wohnort: gotha
- Kontaktdaten:
Kurze Frage zum .so import
amiga rulez...
Rebirth Software
Rebirth Software
Re: Kurze Frage zum .so import
Hallo xperience2003!
Ich merke hier noch recht viel Unwissen in Bezug auf die Erstellung und Benutzung externer Libs (als shared oder static).
->Bei einem "Shared Object oder einer DLL wird diese nicht statich mit gelinkt.
Wenn du aber deine ".so" als ".o" (ohne nachfolgendes Linken zu einem ausführbaren Programms) erstellt hast kannst du diese auch statisch linken.
Die Größe einer .dll/.so liegt auch an der Größe des darin befindlichen Codes.
Wenn PureBasic aber eine gleiche .so schon im dafür vorgesehen Systemverzeichnis findet (Angaben z.B. so: -lm, -lsqlite, ..) können diese auch ohne zusätzliche Pfadangabe dynamisch verknüpft werden.
Ich merke hier noch recht viel Unwissen in Bezug auf die Erstellung und Benutzung externer Libs (als shared oder static).
Wie hast du das "Shared Object" erstellt?die exe ist auch 23kb, dann hab ich die .so aus dem verzeichnis genommen
die exe geht immer noch
kann es sein das die .so statisch gelinkt wird?
->Bei einem "Shared Object oder einer DLL wird diese nicht statich mit gelinkt.
Wenn du aber deine ".so" als ".o" (ohne nachfolgendes Linken zu einem ausführbaren Programms) erstellt hast kannst du diese auch statisch linken.
Die Größe einer .dll/.so liegt auch an der Größe des darin befindlichen Codes.
Wenn PureBasic aber eine gleiche .so schon im dafür vorgesehen Systemverzeichnis findet (Angaben z.B. so: -lm, -lsqlite, ..) können diese auch ohne zusätzliche Pfadangabe dynamisch verknüpft werden.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
-
- Beiträge: 965
- Registriert: 04.10.2004 18:42
- Computerausstattung: Amiga, LinuxMint, Windows7
- Wohnort: gotha
- Kontaktdaten:
Re: Kurze Frage zum .so import
ok, dann wars wohl zufall
aber, gibt es einen weg das pb-compilat , wenn es noch ein .o ist
"abzufangen", bevor der linker die so draus macht
oder umgekehrt, aus der .so ein statisches .o zu machen?
---
also mein ziel ist es, mit pb eine kleine lib zu bauen
die ich dann weitergeben kann
die der anwender dann aber mit einlinken kann, ohne
das er noch die .so im verzeichniss hat, also nen stand-alone exe
aber, gibt es einen weg das pb-compilat , wenn es noch ein .o ist
"abzufangen", bevor der linker die so draus macht
oder umgekehrt, aus der .so ein statisches .o zu machen?
---
also mein ziel ist es, mit pb eine kleine lib zu bauen
die ich dann weitergeben kann
die der anwender dann aber mit einlinken kann, ohne
das er noch die .so im verzeichniss hat, also nen stand-alone exe
amiga rulez...
Rebirth Software
Rebirth Software
Re: Kurze Frage zum .so import
Ich würde dir abraten statisch zu linken.
Bei den nächsten PB-Versionen könnte es schon nicht mehr funktionieren.
So und nun der Reihe nach:
1.
Purebasic kann keine statischen .a/.lib/... erstellen.
2.
Es ist über den -c Argument beim Purebasic-Compiler möglich eine .asm -Datei zu erstellen.
Diese kann dann unter Linux mit dem fasm übersetzt werden.
Dabei entsteht auch eine .o(Object)-Datei.
Wenn man diese aber einfach statisch linken möchte hat man dieses Problem: "multiple definition"
3.
Du könntest eine statische Lib in einer anderen Programmiersprache (auf dem selben System) erstellen und diese versuchen über den Import - Befehl einzubinden.
4.
Es ist besser eine Art ausführbares Programmarchiv/Installer für dein Programm zu verwenden.
Z.Bsp. könntest du ein .deb-Archiv (Unter Debian based Linux-Versions) erstellen und deine .so -Dateien sauber in ein /usr/lib -Verzeichnis installieren lassen.
(.deb - Installerdateien lassen sich unter Linux sehr schön mit diesem Tool erstellen: debreate)
5.
Vielleicht fällt jemanden noch eine bessere Lösung ein.
Anbei:
Eine weitere (mit Bedacht) abzuwegende Möglichkeit wäre: OpenSource
Bei den nächsten PB-Versionen könnte es schon nicht mehr funktionieren.
So und nun der Reihe nach:
1.
Purebasic kann keine statischen .a/.lib/... erstellen.
2.
Es ist über den -c Argument beim Purebasic-Compiler möglich eine .asm -Datei zu erstellen.
Diese kann dann unter Linux mit dem fasm übersetzt werden.
Dabei entsteht auch eine .o(Object)-Datei.
Wenn man diese aber einfach statisch linken möchte hat man dieses Problem: "multiple definition"
3.
Du könntest eine statische Lib in einer anderen Programmiersprache (auf dem selben System) erstellen und diese versuchen über den Import - Befehl einzubinden.
4.
Es ist besser eine Art ausführbares Programmarchiv/Installer für dein Programm zu verwenden.
Z.Bsp. könntest du ein .deb-Archiv (Unter Debian based Linux-Versions) erstellen und deine .so -Dateien sauber in ein /usr/lib -Verzeichnis installieren lassen.
(.deb - Installerdateien lassen sich unter Linux sehr schön mit diesem Tool erstellen: debreate)
5.
Vielleicht fällt jemanden noch eine bessere Lösung ein.
Anbei:
Eine weitere (mit Bedacht) abzuwegende Möglichkeit wäre: OpenSource
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat