如何将
.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 文件
需要链接对象和源目录,语法如下:
LIBS += -L/路径/共享/lib -lshared INCLUDEPATH += /path/srcDir/
但是每次对源文件或头文件进行任何修改时,都需要重建 .so 文件(对象)以使其在链接到共享库的应用程序中可见
如果您在共享 lib 源文件中进行了修改,并且没有将所有源构建到 .so 文件,则您的主应用程序仅获得以前构建的版本
包括