Forum: Compiler & IDEs liblxi und lxi-tools unter Linux compilieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Markus W. (dl8mby)


Lesenswert?

Hallo Forum,

bin etwas am verzweifeln, beim Compilieren von liblxi bzw. lxi-tools.
Habe es schon auf anderen Rechnern etliche male problemlos gemacht
aber jetzt habe ich das Problem wenn ich liblxi compiliere und
installiere, dass beim Compilieren von lxi-tools ums verrecken die
liblxi nicht gefunden wird. Steht bei mir unter /usr/local/lib64.

Habe mich heute wieder hingesetzt und mir das Verzeichnis der
Sourcen der liblxi durchgesehen und dort das test Verzeichnis gefunden.

Dachte mir, dass das Testprogramm doch wenigstens laufen müsste, wenn
liblxi fehlerfrei compilert und installiert wird.

Vorweg habe ich mit ldd geschaut, ob der Lib irgendwelche libs
fehlen - das ist nicht der Fall, alles sieht ok aus.

>ldd /usr/local/lib64/liblxi.so | gerp -i found

liefert keinen Output. Den Output ohne grep erspare ich Euch.

Versuche ich das Testprogramm zu compilieren, erhalte ich vom
Linker 'undefined reference to ...' Fehler

>gcc -o scpi scpi.c -llxi
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `clnt_create'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_char'
.....
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_void'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_int'
collect2: error: ld returned 1 exit status

Suche ich hingegen mit objdump in der Lib nach den Symbolen, so
finde ich diese %-)

>objdump -x /usr/local/lib64/liblxi.so | grep 'xdr_char'
0000000000000000         UND  0000000000000000              xdr_char
mw@linux-kwm1:/dev/shm/liblxi/test
>objdump -x /usr/local/lib64/liblxi.so | grep 'xdr_void'
0000000000000000         UND  0000000000000000              xdr_void

Allerdings sind die Einsprungadressen Null!

Wo liegt mein Problem?

Hat jemand eine Idee.

Wollte eigentlich für einen anderen Thread meine Oszi-Screenshots
machen und nicht beim der lxi Installation Zeit verschwenden.

Wäre für Eure Hilfe dankbar.

LG
Markus

von Harry L. (mysth)


Lesenswert?

In /usr/local/lib einen Symlink auf dein Library anlegen und 
anschließend einmal ldconfig aufrufen (natürlich mit root-Privilegien!)

Danach sollte es gehen.

von Markus W. (dl8mby)


Lesenswert?

Hallo Harry,

danke für die schnelle Antwort.

Werde ich gleich ausprobieren, verstehe aber Deinen Lösungs-
vorschlag nicht, da der Linker bei mir an der richtigen Stelle
sucht - s.u.  "/usr/local/lib64/liblxi.so"

Markus

>gcc -llxi -o scpi scpi.c
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `clnt_create'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_char'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_bool'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_u_int'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_enum'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_u_char'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_u_short'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_string'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_bytes'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_void'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_int'
collect2: error: ld returned 1 exit status

von Markus W. (dl8mby)


Lesenswert?

Harry, hat leider nicht geholfen!

root@linux-kwm1:/usr/local/lib
>ln -s /usr/local/lib64/liblxi.so liblxi.so
root@linux-kwm1:/usr/local/lib
>ldconfig liblxi.so
ldconfig: relative path `liblxi.so' used to build cache

mw@linux-kwm1:/dev/shm/liblxi/test
>gcc -llxi -o scpi scpi.c
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `clnt_create'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_char'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_bool'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_u_int'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_enum'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_u_char'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_u_short'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_string'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_bytes'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_void'
/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld 
:  /usr/local/lib64/liblxi.so: undefined reference to `xdr_int'
collect2: error: ld returned 1 exit status

von Harry L. (mysth)


Lesenswert?

Markus W. schrieb:
> root@linux-kwm1:/usr/local/lib
>>ldconfig liblxi.so
> ldconfig: relative path `liblxi.so' used to build cache

Du musst ldconfig OHNE Argumente aufrufen.
Aber irgendwas scheint da mit deinen rpc-Librarys noch nicht zu stimmen.
Evtl. fehlen die dev-Pakete dafür.

von Markus W. (dl8mby)


Lesenswert?

Harry,

meisten sieht man fehlende dev-Packete
beim Aufruf von configure.

Ich kann mir es aber kaum vorstellen, wobei ich mich
auch irren kann.
Wenn ich ldd auf eine Lib oder ein Binary anwende, sehe
ich sofort, ob was beim dynamischem Laden fehlt oder nicht.

Das hat mir immer gute Dienste bei der Suche nach der
Fehlerursache geleistet.

Ich könnte mir vorstellen dass das Problem am aktuelle Kernel
mit seinen neuen Schnittstellen liegt.
Linux linux-kwm1 5.8.7-1-default #1 SMP Sun Sep 6 07:39:46 UTC 2020 
(7fc52c0) x86_64 x86_64 x86_64 GNU/Linux
Denn auf meinen anderen Rechnern laufen die lxi-tools ohne Probleme.
Auf dem zbook17 G3, dass ich seit einiger Zeit habe und mit dem
neusten Linux betreibe, tritt das Problem aber auf.

Dann bleibt mir nichts weiter übrig als weiter zu suchen.

Danke derweil für Deine Mühe.

Markus

von Markus W. (dl8mby)


Lesenswert?

Hallo zur Info,

xdr_ sind RPC Daten Typen die in der usr/include/rpc/xdr.h
und mit der Lib libtirpc zusammenhängen.
Die Lib ist bei mir zwar installiert aber trotzdem trat der o.g.
Fehler auf.

Nachdem ich das Compilieren mit dem Schalter -ltirpc aufgerufen
habe, konnte ich das Testprogramm der liblxi compilieren und
linken.

>gcc -llxi -ltirpc scpi.c -o scpi
mw@linux-kwm1:/dev/shm/liblxi/test
>ls -l
total 32
-rwxr-xr-x 1 mw users 20936 Oct  3 13:28 scpi
-rw-r--r-- 1 mw users   610 Oct  3 13:19 scpi.c
-rw-r--r-- 1 mw users   691 Oct  2 20:11 search.c

Nun werde ich nach gleicher Methode beim lxi-tool verfahren.

Melde mich später wenn es geklappt hat.

Markus

: Bearbeitet durch User
von Markus W. (dl8mby)


Lesenswert?

Weitere nützliche infos zu lxi findet man auch auf EEVBlog.

https://www.eevblog.com/forum/testgear/open-source-lxi-tools-and-liblxi-v1-0-released-for-gnulinux/

Markus

von Markus W. (dl8mby)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

Kaum sind zwei Tage vergangen konnte ich einen
Screendump von meinem SDS2k machen.

Mit lxi und lxi-tools hatte ich kein Glück beim
SDS2k Oszi, obwohl beim SSA3k alles gut funktioniert.

Dem SDS2k bin ich mittels Python/usbtmc/pyusb beigekommen.

Lange Rede kurzer Sinn, das Skript um das SCDP Kommando
unter Linux abzusetzen und den Output zu lesen habe ich
angehängt.

Die udev rules lauten
>cat /etc/udev/rules.d/95-siglent.rules
# USBTMC instruments
# Siglent SDS2000X idVendor=f4ec, idProduct=ee3a
SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="f4ec", 
ATTRS{idProduct}=="ee3a", GROUP="usbtmc", MODE="0660"

Danach als root "udevadm control --reload", damit die Regel wirkt.

Der Dump eines Rechteck-Signals ist auch im Anhang zu sehen.

Gruß
Markus

PS.: Jetzt kann ich mich meinem eigentlichen Problem zuwenden
dem PicoScope das spinnt - das ist aber in einem anderen Thred
zu lesen.

von Markus W. (dl8mby)


Angehängte Dateien:

Lesenswert?

@All,

habe ein python3 Skript gemacht, das den Screen-Dump
im .bmp [default] .jpg und .png erzeugt.

Aufruf screen_copy_sds2k.py

ohne Parameter erzeugt es ein "screen_dump.bmp" File
mit Parameter -f <File-Name-ohne-ext> erzeugt es File-Name-ohne-ext.bmp
mit Parameter -e jpg oder png erzeugt es ein "screen_dump.(jpg|png) File
mit beiden Parametern -f <File-Name-ohne-ext> -e jpg oder png 
entsprechen
die Kombination aus beien.

Parameter -h bzw --help für den Hilfe Screen.

Ich hoffe das ist für den einen oder anderen hilfreich,
der auch mit der SDS2KX Serie Dumps machen will.

Markus

von Markus W. (dl8mby)


Lesenswert?

Noch was!

Mir ist noch eingefallen, dass z.B. die SSA's und wahrscheinlich
auch die neuen SVA's und SDSxxxx-E, SDSxxxx-X-Plus Serien von haus
aus jetzt PNG's als Screen-Dump Format verwenden.

Mein Skript hat als Default .bmp was wesentlich größere Files
bedeutet und etwas unpraktischer ist. Somit muss man es für die
anderen Siglent Geräte so anpassen, dass PNG als default Bild-Format
verwendet wird. Könnte man entsprechend des Resultats der *IDN?
Abfrage steuern.

Für meinen Zweck und für alle anderen, die sie SDS2kX Serien mit
dem Blackfin-DSP ohne Linux besitzen, ist das Skript aber durchaus
nützlich.

Markus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.