Sziasztok,
Nem hasznaltam meg a Boost library-t, es igazabol csak egy projektet szeretnek leforditani ami hasznal, de amikor linkelnem ossze az object file-okat, tele van "undefined reference"-szel (a Boost:Log kellene vegulis csak).
Felturtam a Google-t, de nem adott relevans talalatokat.
Gondoltam, megkerdezem a ChatGPT-t:
https://chatgpt.com/share/673b3d2d-6674-8013-aa59-eef5c3692b17
Keszitett is egy forrast, illetve, hogy hogyan kellene forditani / linkelni, csak sajnos ugyanugy nem mukodik. A forditas / linkeles eredmenye:
Mar probaltam kulon forditani aztan linkelni, mindenfele kapcsolokat (pl. -std=c++11 / -std=c++14 / -std=c++17, -DBOOST_LOG_DYN_LINK, ...), de nem jutok elorebb.
Debian 12, GCC 12.2, a Boost library-k elvileg fent vannak (a -dev csomagok is termeszetesen).
Valaki tudja, hogyan lehetne mukodokepesse tenni?
Koszi
Edit:
A fenti kod mar lefordul.
g++ boost.o -lpthread -lboost_log -lboost_log_setup -lboost_thread -o boost
Sajnos amit szeretnek, az me'g nem. Felmerult bennem, hogy amiatt nem megy, hogy C es C++ is van benne.
Egyebken amit el szeretnek erni, hogy ebbol:
https://github.com/SiliconLabs/UnifySDK
le tudjam forditani ezt:
https://github.com/SiliconLabs/UnifySDK/blob/main/applications/zpc/appl…
- 357 megtekintés
Hozzászólások
a megfelelo -dev csomagok fenn vannak?
linkeleskor meg kell adni hogy a boots-ot is keressel: -lboost_log (vagy valami hasonlo). de eleve hibas ha te kezzel akarod csinalni. kene valami makefile vagy cmake hozza, es az elvegzi helyetted az ilyet.
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Azert dobtam be a ChatGPT-s linket, mert ott latszik pontosan, hogy mi a forras es az is hogy a ChatGPT szerint hogyan kell forditani, illetve a forditas kimenete a pastebin.com-on, hogy latszodjon mi a hiba.
Az eredeti project Cmake alapu, csak oriasi. Nekem egyetlen egy executable kellen belole, ami nehany .c / .cpp file, amiket le is forditottam, de osszelinkelni mar nem sikerul. Elosszor megneztem, hogy cmake-kel megye, de ez kb. a legaljan van, fugg a felette levo cuccoktol. Lepegettem felfele, egy ido utan mar Rust meg Docker fuggese van, kb. 10GB lenne mire leforditom - ezt szeretnem elkerulni.
/sza2
Digital? Every idiot can count to one - Bob Widlar
- A hozzászóláshoz be kell jelentkezni
g++ -std=c++11 -Wall -pedantic -g -O0 -DBOOST_LOG_DYN_LINK -c boosttest.cc
g++ boosttest.o -lpthread -lboost_log -o boosttest
Egy ugyanilyen kérdésnél a -lboost_log volt a válasz
- A hozzászóláshoz be kell jelentkezni
A compile megy (az ment is), de a link nem (a file-om neve boost.c, nem boosttest.c mint a peldaban):
g++ boost.o -lpthread -lboost_log -o boost
/usr/bin/ld: boost.o: undefined reference to symbol '_ZN5boost6detail12get_tss_dataEPKv'
/usr/bin/ld: /lib/x86_64-linux-gnu/libboost_thread.so.1.74.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Hozzaadtam a boost_thread library-t, de nem lett sokkal jobb:
g++ boost.o -lpthread -lboost_log -lboost_thread -o boost
/usr/bin/ld: boost.o: in function `boost::log::v2_mt_posix::basic_formatter<char> boost::log::v2_mt_posix::parse_formatter<char>(char const*)':
/usr/include/boost/log/utility/setup/formatter_parser.hpp:207: undefined reference to `boost::log::v2_mt_posix::basic_formatter<char> boost::log::v2_mt_posix::parse_formatter<char>(char const*, char const*)'
collect2: error: ld returned 1 exit status
Ez az masodik uzenet hasonlit a korabbiakhoz - igaz ott tobb volt.
De a -lboost_log ott volt a ChatGPT-s eredetiben is, hasznaltam is.
BTW, azota leszedtem az osszes libboost csomagot (minden verziot, *-dev-et) es ujra felraktam, csak az 1.74-est.
Edit: egy -lboost_log_setup hianyzott, igy lefordult - igy visszaterhetek az eredeti projecthez, ami viszont meg nem fordul.
/sza2
Digital? Every idiot can count to one - Bob Widlar
- A hozzászóláshoz be kell jelentkezni
LDFLAGS, hogy hol keresse a libeket?
- A hozzászóláshoz be kell jelentkezni
LDFLAGS nincs, de a parancssorban van -L/usr/lib/x86_64-linux-gnu ami szerintem egyenerteku. Viszont dinamikus linkelesnel talan nincs is ra szukseg, elvileg az ldconfig osszegyujti (ldconfig -v paranccsal latszik is, hogy ott vannak).
/sza2
Digital? Every idiot can count to one - Bob Widlar
- A hozzászóláshoz be kell jelentkezni
Pontosítás: Az ldconfig csak a /etc/ld.so.conf által leírt mappákból gyűjtögeti össze a libeket. Ha van olyan libed, ami valami obskúrus helyen van, akkor oda nem fog bekukkantani.
De egyébként a -L nem csak akkor tud segíteni, hanem asszem akkor is, ha több verziód van ugyanabból a libből, mert linkelésnél precedencia van a -L kapcsolóval átadott mappákra, csak utána néz körül a rendszerben.
- A hozzászóláshoz be kell jelentkezni
latod ezert kene valami keret cuccot hasznalni, ami tudja (lekerdezi pkg-config-tol) hogy mihez milyen plusz kapcsolok/libek kellenek.
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Igen, csak egyreszt nem ertek hozza, masreszt akkor is ossze kell rakni a "keret cucchoz" a configot. Mivel a project CMake alapu, azt nezegettem, de nekem pilotavizsgasnak tunik.
Megnezem egyebkent a pkg-config-ot, en ugy latom a Boost-hoz nincs.
/sza2
Digital? Every idiot can count to one - Bob Widlar
- A hozzászóláshoz be kell jelentkezni
ah valoban, rosszul emlekeztem a libboostra. de egy normalis build keretrendszer megcsinalna ezt akkor mashogy.
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Ha tudsz tanacsot adni, szivesen veszem.
Tudom, hogy mely forras es header file-ok kellenek a forditashoz illetve elvileg tudom, hogy milyen library-k szuksegesek.
Ha ezekbol valami, valahogy legeneralja, hogy hogyan kell forditani (cmake?) akkor hasznalnam, csak azt kellene tudnom, hogyan rakjam ossze.
/sza2
Digital? Every idiot can count to one - Bob Widlar
- A hozzászóláshoz be kell jelentkezni
Pedig a CMake-nak van specifikus támogatása a Boost-hoz: https://cmake.org/cmake/help/v3.10/module/FindBoost.html
Élő példa: https://stackoverflow.com/a/6646746/182474
- A hozzászóláshoz be kell jelentkezni
> g++ boost.cpp -DBOOST_LOG_DYN_LINK -lboost_log -lboost_log_setup -lboost_thread -o boost
> file boost
boost: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ec6c5a5442b4c30cfdd5a43fd2570d62d4d5028b, for GNU/Linux 4.4.0, not stripped
- A hozzászóláshoz be kell jelentkezni
OK, kozben en is megtalaltam, irtam is:
https://hup.hu/comment/3137888#comment-3137888
de a nyitoba is beirom, hogy ez mar fordul, csak az project nem amihez kellene.
/sza2
Digital? Every idiot can count to one - Bob Widlar
- A hozzászóláshoz be kell jelentkezni
Három komponenst vélek látni, amelyek bármelyike önmagában is garantáltan szopással jár: C++, cmake, boost, éjjájj. Oké, ez négy volt, bocsánat.
- A hozzászóláshoz be kell jelentkezni
Rendben, de ez egy adottsag, nem tudok rajta valtoztani. Mondjuk az AI pont mukodott, csak kicsit kellett rasegiteni.
/sza2
Digital? Every idiot can count to one - Bob Widlar
- A hozzászóláshoz be kell jelentkezni
Elég nagy méretű projekt ez. Én először a cmake által generált make targetek (make help) között próbálnám megkeresni a zpc-t és azt külön fordítani. Ez persze lehet, hogy ugyanúgy rengeteg mást behúz. (Lehet úgy paraméterezni a cmake-t is, hogy csak a zpc-re készítse el a build-et).
Lehet még valami make --dry-run kimenetet nézni és abból mazsolázni, de az is "brutál" lesz. :)
- A hozzászóláshoz be kell jelentkezni