У меня есть файлСвязывание ошибки при связывании статических библиотек из QtCore.a
1) Файл myStubs.cpp
#include <stdlib.h>
#include <new>
void* qMalloc(size_t sz) {return malloc(sz);}
void qFree(void* ptr) {free(ptr);}
void* qRealloc(void* ptr, size_t sz) {return realloc(ptr, sz);}
я сделать статическую библиотеку из этого файла
1) g++ -fPIC -c myStubs.cpp -o lib_mylib.o
2) ar rcs libMyLib.a lib_mylib.o
В Qt Core у нас есть файл qglobal.cpp
2) Файл qt-x11-opensource-src-4.3.3/src/corelib/global/qglobal.cpp и sam е функции, как выше в этом файле
/*
These functions make it possible to use standard C++ functions with
a similar name from Qt header files (especially template classes).
*/
Q_CORE_EXPORT void *qMalloc(size_t size);
Q_CORE_EXPORT void qFree(void *ptr);
Q_CORE_EXPORT void *qRealloc(void *ptr, size_t size);
Когда я связать статическую библиотеку libMyLib.a и статическую библиотеку QtCore (libQtCore.a) и QtGui (libQtGui.a). Я получаю следующее сообщение об ошибке сборки
lib/libQtCore.a(qglobal.o): In function `qMalloc(unsigned long)':
qglobal.cpp:(.text+0x170): multiple definition of `qMalloc(unsigned long)'
libMyLib.a(myStubs.o):myStubs.cpp:(.text+0x0): first defined here
Вопросы
1) Если удалить qMalloc, qFree и qRealloc из файла myStubs.cpp, я не получаю сообщение об ошибке сборки, Является ли это правильным способом решения этой проблемы
Заглядывая вперед для обратной связи
Почему вы переопределяете функции QtCore? – mascoj
Возможно, вы захотите только иметь прототипы функций в myStubs.cpp? –
Почему у вас даже есть файл 'myStubs.cpp'? Почему, по-вашему, вам это нужно? –