Pracuję nad projektem, który używa sterowników ftdi D2XX do połączenia z urządzeniem ENTTEC DMX usb pro. Sterowniki ftdi (libftdi2xx.so.1.1.12 przechowywane w katalogu/usr/local/lib /) są kompilowane w stosunku do wersji glibc v2.14 lub wyższej.Łączenie skompilowanej biblioteki z nowszą wersją glibc
Rozwijam się na debian 7, który obsługuje tylko do glibc v2.13. Podczas wykonywania kodu C napisałem (że dzwoni do FTDI kierowców) daje błąd:
./a.out: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/lib/libftd2xx.so)
Ma to sens, wiedząc, że wersja glibc jest niezgodna. I pobraniu i zainstalowaniu najnowszej wersji glibc (v2.17) do katalogu tymczasowego ('~/glibc-testing/install/lib /') na moim komputerze i za pomocą połączenia:
~/glibc-testing/install/lib/ld-linux-x86-64.so.2 --library-path ~/glibc-testing/install/lib/ ./a.out
Z to połączenie, mogę pomyślnie uruchomić kod C.
Chciałbym skompilować ten kod C do biblioteki współdzielonej. Będzie on używany do połączenia z urządzeniem DMX i będzie wywoływany przez główną aplikację opracowaną na C#.
Nie jestem pewien, jak posunąć się do przodu. To, co muszę zrobić, to powiedzieć sterownikowi fdti, aby zawsze korzystał z nowszej wersji glibc, pozwalając reszcie aplikacji korzystać z normalnych bibliotek. Sterowniki ftdi 2DXX są dostępne tylko przed skompilowaniem (brak kodu źródłowego). Czy istnieje sposób na połączenie tego skompilowanego programu z nową biblioteką?
Zajrzałem do opcji, w których eksportuję LD_LIBRARY_PATH =/home /.../ glibc/install/lib/i odniosłem niewielki sukces.
Dziękujemy!
Jedynym rozsądnym sposobem działania byłoby skontaktowanie się z kimkolwiek, kto jest kierowcą i zażądanie wersji powiązanej ze starszą wersją glibc. –
Czy próbowałeś używać LD_PRELOAD? – maha
Myślę, że ustawienie rpath powinno załatwić sprawę, zobacz [tutaj] (http://www.eyrie.org/~eagle/notes/rpath.html). [Możesz nawet zresetować ścieżkę rpath w aplikacji po kompilacji] (https://stackoverflow.com/questions/13769141/can-i-change-rpath-in-an-already-compiled-binary)! – Bort