Столкнулся с такой проблемой при использовании динамической либы в Си. Допустим в библиотеке используется функция


uint16_t crc16_ccitt (const void *p, size_t size);



она используется исключительно внутри библиотеки в не объявлена в экспортируемых заголовочных файлах.


Если вдруг в приложении, где будет использоваться эта библиотека, есть функция с таким же именем, то из библиотеки вызывается именно эта пользовательская реализация… конкретно это я заметил исключительно потому, что у пользователя эта функция была объявлена как


uint16_t crc16_ccitt (size_t size, const void *p);



то есть параметры были поменяны местами и когда библиотека пыталась ее вызвать, приложение падало в segmentation fault.


Есть ли какой-то способ избежать таких эффектов и изолировать функции библиотеки от пользовательских функций с таким же именем, возможно, некоторая опция gcc?


Если нет, то как такую проблему решают в крупных проектах?


Библиотека собирается с такими опциями:


-fPIC -c -std=c11 -fplan9-extensions -Wall -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-format-zero-length









 , ,






URL записи