将 .so 文件的标头包含到其他 C++ 应用程序

问题描述 投票:0回答:1

如何将

.so
文件的标头包含到其他 C++ 应用程序中?

尝试将Shared.h包含到C++程序中,但无法识别

构建文件夹文件:

shared-Debug$: ls

libshared.so libshared.so.1.0 Makefile
libshared.so.1 libshared.so.1.0.0 Shared.o

专业文件:

CONFIG -= qt

TEMPLATE = lib
DEFINES += SHARED_LIBRARY

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    Shared.cpp

HEADERS += \
    shared_global.h \
    Shared.h

# Default rules for deployment.
unix {
    target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += target

shared_global.h

#ifndef SHARED_GLOBAL_H
#define SHARED_GLOBAL_H

#if defined(_MSC_VER) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__) || defined(WIN32) \
        || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
#define Q_DECL_EXPORT __declspec(dllexport)
#define Q_DECL_IMPORT __declspec(dllimport)
#else
#define Q_DECL_EXPORT __attribute__((visibility("default")))
#define Q_DECL_IMPORT __attribute__((visibility("default")))
#endif

#if defined(SHARED_LIBRARY)
#define SHARED_EXPORT Q_DECL_EXPORT
#else
#define SHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // SHARED_GLOBAL_H

共享.h

#ifndef SHARED_H
#define SHARED_H

#include "shared_global.h"

class SHARED_EXPORT Shared
{
public:
    Shared();
    void test();
};

#endif // SHARED_H

共享.cpp

#include "Shared.h"

Shared::Shared() {}

void Shared::test()
{
}

使用QT6、Qt Creator 6.4.2、Ubuntu Jammy 22.04.3 LTS、GNU、C++ 重要:没有任何关于 QT6 的内容,在 IDE 本身的上下文中提到了 Qt Creator

我有一个减少项目构建时间的想法: 将部分功能从当前App移至新App 为了防止使用共享“标头”进行重建,我想创建作为共享对象的 .so 文件

c++ object linker header shared-libraries
1个回答
0
投票

需要链接对象和源目录,语法如下:

LIBS += -L/路径/共享/lib -lshared INCLUDEPATH += /path/srcDir/

但是每次对源文件或头文件进行任何修改时,都需要重建 .so 文件(对象)以使其在链接到共享库的应用程序中可见

如果您在共享 lib 源文件中进行了修改,并且没有将所有源构建到 .so 文件,则您的主应用程序仅获得以前构建的版本

包括 本身的行为类似于符号链接,并且仍然依赖于 .so 构建的源文件

© www.soinside.com 2019 - 2024. All rights reserved.