C++ 在动态qt库中导出符号
我正在尝试在OSX10.6.7和Qt4.7.3上使用Qt创建一个动态库。我已经创建了我能想到的最基本的测试(见下文或) 仍然报告C++ 在动态qt库中导出符号,c++,qt4,qmake,dylib,C++,Qt4,Qmake,Dylib,我正在尝试在OSX10.6.7和Qt4.7.3上使用Qt创建一个动态库。我已经创建了我能想到的最基本的测试(见下文或) 仍然报告 build/libstackoverflow.dylib: Table of contents (0 entries) module index symbol index 我想我应该在列表中看到与阶乘相关的其他内容 测试用例(也在:): 我读过: 如果适用,请推荐其他资源 编辑: 我相信符号可能被正确导出,尽管它们的名称被损坏(或者至少看起来是这样),我认为
build/libstackoverflow.dylib:
Table of contents (0 entries)
module index symbol index
我想我应该在列表中看到与阶乘相关的其他内容
测试用例(也在:):
我读过:
0000000000001f20 T __Z9factoriali
U ___gxx_personality_v0
U dyld_stub_binder
这是我应该期待的吗?
< P>我不认为仅仅导出将禁用C++名称的修改。如果您想导出“普通C”函数而不损坏,则需要将它们的声明包装在extern“C”{}
块中(当然最好是在头中)
<> PrimeMngle并不能阻止成功的链接,只要“客户端”代码也用C++编译器编译。如果你想让它们都能用于C和C++,则需要根据C/C++编译器有条件地定义<代码>外部“C”<代码>。在这种情况下,我正在编译一个Qt库,并尝试使用节点FFI()引用它。添加外部“C”确实使符号可用!所以谢谢你的建议!
// main.cpp
#include <stdint.h>
#include <QtCore/QtGlobal>
#if defined(MYSHAREDLIB_LIBRARY)
# define MYSHAREDLIB_EXPORT Q_DECL_EXPORT
#else
# define MYSHAREDLIB_EXPORT Q_DECL_IMPORT
#endif
MYSHAREDLIB_EXPORT uint64_t factorial(int max) {
int i = max;
uint64_t result = 1;
while (i >= 2)
result *= i--;
return result;
}
// stackoverflow.pro
TEMPLATE = lib
DEFINES += MYSHAREDLIB_LIBRARY
CONFIG += qt dll
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
DESTDIR = ./build
# Input
SOURCES += main.cpp
qmake
make
0000000000001f20 T __Z9factoriali
U ___gxx_personality_v0
U dyld_stub_binder