C++ 在动态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 我想我应该在列表中看到与阶乘相关的其他内容 测试用例(也在:): 我读过: 如果适用,请推荐其他资源 编辑: 我相信符号可能被正确导出,尽管它们的名称被损坏(或者至少看起来是这样),我认为

我正在尝试在OSX10.6.7和Qt4.7.3上使用Qt创建一个动态库。我已经创建了我能想到的最基本的测试(见下文或)

仍然报告

build/libstackoverflow.dylib:
Table of contents (0 entries)
module index symbol index
我想我应该在列表中看到与阶乘相关的其他内容

测试用例(也在:):

我读过:

如果适用,请推荐其他资源

编辑:

我相信符号可能被正确导出,尽管它们的名称被损坏(或者至少看起来是这样),我认为使用Q_DECL_导出宏应该避免这种情况。例如,下面是运行nm-g build/libstackoverflow.dylib的结果:

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