Měl bych dvě poznámky. Linkování s nativními knihovnami zjednodušuje nástroj cargo (ten v podstatě značně zjednodušuje všechno, co nějak souvisí s Rustem :) ) a možná by tak bylo lépe uvádět jako příklad Cargo.toml spíš než Makefile, se kterými žádný reálný Rustový projekt nepracuje.
Zadruhé, a na doplnění, existuje utilita rust-bindgen, která přečte céčkový soubor .h a automaticky generuje základní deklarace v Rustu podobné těm v článku.
To je pravda a mockrát díky za připomenutí. Cargo projekty s nativními knihovnami se budu zabývat příště. V dnešním článku jsem hlavně chtěl ukázat, jak to vlastně funguje, protože Cargo udělá mezivrstvu mez Rustem a céčkem (což samozřejmě není špatné, ale někdy je dobré se podívat pod tu mezivrstvu :)
Popravdě o rust-bindgen jsem nevěděl, takže díky!
aha diky. Stejne si o tom budu muset precist jak presne to funguje, protoze chovani (IMHO) stale zavisi na tom, jak prekladac resi zarovnani. i32 a float je asi ok na 16bitovych a 32bitovych strojich, ale rekneme ze mam strukturu:
struct ChroChro {
foo: u8;
bar: i64;
baz: i8;
}
ocekavam (mozna spatne?) ze bar bude zarovnan a tudiz tam bude prednim vypln, 3 nebo 7 bajtu...
Očekáváte správně. Pragma repr(C) znamená právě, že struktura musí být zarovnaná podle pravidel ABI C na dané architektuře. Pár informací najdete na https://doc.rust-lang.org/nomicon/other-reprs.html
Neni zavolani "export LD_LIBRARY_PATH=." hned z nekolika duvodu spatna rada?
Kdyz uz, tak bych aspon napsal "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.", aby mi z cesty nezmizelo neco, o co stojim (pak cloveku prestanou fungovat programy a on se divi, proc).
Zadruhe - nejsem si 100% jist pravidly expanze te tecky v ruznych shellech, ale aspon v bashi bych tipoval, ze se to promenne opravdu prida ta tecka, coz muze byt dost nebezpecne (jelikoz to pak komukoli umozni pouhym umistenim zle knihovny do adresare, ze ktereho spoustim program, nacist onu zlou knihovnu misto knihovny systemove).
Idealni by mi prislo nastavit promennou takto: "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`"
obecně je to skutečně špatně a nemělo by se to dělat, minimálně ne pro sezení použité i na něco jiného než překlad a spuštění. Podle mě je lepší nastavit to jen pro jeden příkaz (na stejném řádku, v článku je to taky). Při spojení s původní hodnotou té proměnné - tady si nejsem jistý, zda přidávat na začátek nebo na konec ve chvíli, kdy budu mít stejně pojmenované knihovny (asi mezní případ).