Fwd: ESP32 zahada C
Petr Labaj
labaj na volny.cz
Neděle Červenec 16 18:00:05 CEST 2023
Ono to možná tak nelogické není (tím teda netvrdím, že je to správné a
intuitivní).
Není to tak, že když nějaký modul přilinkuje, tak ho musí přilinkovat
celý? Že z něho neumí vyzobnout jen část.
Tak prostě přeloží všechny, a když to skládá linkerem, tak tam přidá jen
ty moduly, ze kterých něco potřebuje. Ale ty pak musí přidat celé a tím
mu vyjde duplicita.
Ale je to jen domněnka. Rozhodně jsem žádný linkerový odborník, jen
uživatel.
PL
*********************
Dne 16.7.2023 v 14:52 Jaroslav Buchta napsal(a):
> No ale kdyz chci weak, napisu weak a pak tuto vlastnost chapu. Takhle
> je to velmi zakerne.
> Zatim jsem jeste chvili zkoumal a vypada to, ze kdyz to z modulu uz
> nic nepotrebuje, tak ho to neresi a ani nekontroluje duplicitu. Kdyz
> tam dam neco, co musi uz prilinkovat, tak to vypise chybu.
>
> Dne 16.07.2023 v 14:44 František Burian napsal(a):
>> Zdravím,
>>
>> https://en.wikipedia.org/wiki/One_Definition_Rule
>>
>> V překladači gcc a v jazyce je multiple definition v linkeru
>> undefined behavior, může si prostě vybrat kterou použije a to co
>> vygeneruje kompilátor v druhé
>> verzi symbolu to skartuje. Je to z důvodu weak, nedokážu to popsat
>> ale bez této vymoženosti by nešel napsat weak.
>>
>> Toto mimochodem bylo důvodem k zavedení namespace.
>>
>> S pozdrvem,
>>
>> František Burian
>>
>> Dne 16. 07. 23 v 14:22 Jaroslav Buchta napsal(a):
>>> Ted zkoumam nejaky kod, (nekoukejte na funkcnost, to ted neni
>>> dulezite) a nechapu, proc linkeru nevadi za nejakych okolnosti, ze
>>> jsou ve 2 souborech identicke
>>> globalni funkce. ESP-IDGF je 5.0.3
>>>
>>> Tak jak to je, se to bez reci prelozi.
>>>
>>> Pokud prejmenuju jednu funkci (init v souboru mcp9804_spy.c) tak
>>> vznikne chyba, kterou bych cekal i v predchozim stavu
>>>
>>> D:/tst/____/unity_fixture_test/components/temperature/mcp9804.c:37:
>>> multiple definition of `mcp9804_get_temperature';
>>> esp-idf/temperature/libtemperature.a(mcp9804_spy.c.obj):D:/tst/____/unity_fixture_test/components/temperature/mcp9804_spy.c:24:
>>> first defined here
>>>
>>> Kdyz ji prejmenuju jen v souboru mcp9804.c je to zase OK.
>>>
>>>
>>> Je to nejaka zamerna featura nebo cim to je? Jedine, co me napada,
>>> ze linker najde vsechny funkce ve prvnim modulu a tim padem se uz na
>>> druhy ani nediva, ale
>>> stejne nevim, jestli je to vlastnost, nebo chyba linkeru...
Další informace o konferenci Hw-list