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