【发布时间】:2016-09-29 21:10:08
【问题描述】:
我有一个文件
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 和上面这个文件中相同的功能是
/*
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) 如果我从文件 myStubs.cpp 中删除 qMalloc 、 qFree 和 qRealloc ,我不会收到构建错误,这是解决此问题的正确方法吗
期待反馈
【问题讨论】:
-
为什么要重新定义 QtCore 函数?
-
您是否只想在 myStubs.cpp 中拥有函数原型?
-
为什么你还有
myStubs.cpp文件?为什么你认为你需要它?
标签: c++ qt static-linking stub linker-errors