LINUX.ORG.RU

Линковка библиотек с одинаковыми именами функций

 , ,


0

1

Не было печали, пока не решил еще одну библиотеку в проект засунуть и оказалось что имена функций повторяются

Как победить можно???

# make -j2 -B Recorder
rm -f Recorder
gcc -c RecorderFDisk.c -I./util-linux/ -Wall -pedantic -O3
gcc -c RecorderArchive.c -I./paho.mqtt.c/src/ -Wall -pedantic -O3
gcc -c RecorderFFmpeg.c -I./FFmpeg/ -Wall -pedantic -O3
gcc -c RecorderFFserver.c -I./FFmpeg/ -O3
g++ -o Recorder Recorder.cpp ./libcommon/Sys.cpp                                \
    RecorderFDisk.o RecorderArchive.o RecorderFFmpeg.o RecorderFFserver.o       \
    ./util-linux/libblkid/src/libblkid_la-probe.o                               \
    ./util-linux/libuuid/src/libuuid_la-parse.o                                 \
    ./util-linux/libuuid/src/libuuid_la-unparse.o                               \
    ./util-linux/libuuid/src/libuuid_la-gen_uuid.o                              \
    ./util-linux/disk-utils/fdisk-fdisk-list.o                                  \
    ./util-linux/.libs/libcommon.a                                              \
    ./util-linux/.libs/libsmartcols.a                                           \
    ./util-linux/.libs/libtcolors.a                                             \
    ./util-linux/.libs/libblkid.a                                               \
    ./util-linux/.libs/libuuid.a                                                \
    ./util-linux/.libs/libfdisk.a                                               \
    ./FFmpeg/libavdevice/libavdevice.a                                          \
    ./FFmpeg/libavfilter/libavfilter.a                                          \
    ./FFmpeg/libavformat/libavformat.a                                          \
    ./FFmpeg/libavcodec/libavcodec.a                                            \
    ./FFmpeg/libavutil/libavutil.a                                              \
    ./FFmpeg/libswscale/libswscale.a                                            \
    ./FFmpeg/libswresample/libswresample.a                                      \
    ./paho.mqtt.c/build/src/libpaho-mqtt3a.a                                    \
    -lpthread -ltinfo -lm -lx264 -lv4l2 -lasound -Wall -pedantic -O3
./paho.mqtt.c/build/src/libpaho-mqtt3a.a(WebSocket.c.o): In function `uuid_generate':
WebSocket.c:(.text+0x11): multiple definition of `uuid_generate'
./util-linux/libuuid/src/libuuid_la-gen_uuid.o:/root/utils/util-linux/libuuid/src/gen_uuid.c:551: first defined here
./paho.mqtt.c/build/src/libpaho-mqtt3a.a(WebSocket.c.o): In function `uuid_unparse':
WebSocket.c:(.text+0xc0): multiple definition of `uuid_unparse'
./util-linux/libuuid/src/libuuid_la-unparse.o:/root/utils/util-linux/libuuid/src/unparse.c:74: first defined here
collect2: error: ld returned 1 exit status
Makefile:39: ошибка выполнения рецепта для цели «Recorder»
make: *** [Recorder] Ошибка 1

★★★
Ответ на: комментарий от EXL

Это CMake. Бессмысленный и беспощадный.

Проблема в том, что https://github.com/eclipse/paho.mqtt.c это кроссплатформенный eclipse.
Поэтому то они и свояли свою функцию (но кое что не учли).

Вообщем копеешная проблема (просто о ней нужно разработчикам сообщить).

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 1)
Ответ на: комментарий от Forum0888

Вообщем копеешная проблема (просто о ней нужно разработчикам сообщить).

Разработчики прекрасно знают о проблеме, раз обернули эти функции в условную компиляцию.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от wolverin

В Си нет перегрузки функций. Так что параметры не важны, только имя. Параметры важны, чтобы allow multiple definitions не натворил дел. Но в случае ТС не натворит, потому что const в данной ситуации по большей части для красоты (обе функции не модифицируют uuid на самом деле).

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)