我想从 Linux C++ .so
共享对象库导出全局 C++ 函数,并在 Linux C++ .out
应用程序中使用这些函数。
我看过一些示例,说明在 Linux 开发环境中这通常是如何完成的。但是我正在使用 Visual Studio Linux 项目和新的 Visual C++ for Linux Development扩大。我相信我所看到的示例中的许多步骤都将由 Visual Studio 构建系统处理,因此在这种情况下情况似乎有些不同。
我在 Visual Studio 中创建了两个 Linux C++ 项目,一个是我在属性中将其更改为 .so
的空项目和一个控制台应用程序。我在控制台应用程序中引用了共享对象库。
共享对象库项目有两个文件,functions.h
和functions.cpp
。
函数.h
#pragma once
void Function_01();
函数.cpp
#include functions.h
extern "C" void Function_01() {
return 0;
}
我已将 functions.h
文件添加到消费控制台应用程序中...
#include <cstdio>
#include "functions.h"
int main()
{
Function_01();
return 0;
}
也许导出全局函数看起来很奇怪,但对于我的问题来说,这似乎是最自然的方法,我打算在库构建和链接后将函数包装在命名空间中。
我做错了什么?如何链接这些 Visual C++ for Linux Development 项目并使用从共享对象库导出的函数?
最佳答案
默认情况下会导出库函数,因此您只需在代码中调用它们并在使用 gcc 构建应用程序时链接到库。你的目标是一个看起来像这样的命令行:
g++ -o myprog myprog.cpp -lfunctions -L/home/test/projects/mylibs
哪里:
- myprog 是您的控制台应用程序的可执行文件,您可以使用
./myprog
从命令行运行它
functions
指的是您的共享对象库,它是一个名为 libfunctions.so 的文件('lib' 和 '.so' 自动前置和附加)- libfunctions.so 可以在文件夹/home/test/projects/mylibs 中找到
在 Visual C++ for Linux Development (VCLinux) 中,您将在 Linker/Input/Library Dependencies 下的项目设置中指定库的名称 functions
以及库所在文件夹的路径可以在 Linker/General/Additional Library Directorys 下找到。 IE。就像将 DLL 与 Windows 应用程序链接时一样。
VCLinux 提供了 Visual Studio 用户熟悉的开发环境。但值得注意的是,虽然 VCLinux 生成 g++ 命令来编译和链接您的应用程序,但您所学到的关于使用 gcc 在 Linux 上构建应用程序的知识非常适用。尽管您现在可以跳过 makefile 章节。
另请注意,VCLinux 还在不断完善中。调试共享库有几个问题,特别是使用测试控制台应用程序 - 更多信息可以在 VCLinux GitHub project page 上找到.我们鼓励您积极并提供建设性反馈。
关于c++ - 从 Linux 动态库/Linux 控制台应用程序导出/导入 C++ 函数 | Visual Studio Linux 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183549/