繁体   English   中英

从Linux动态库/ Linux控制台应用程序导出/导入C ++函数| Visual Studio Linux项目

[英]Exporting / Importing C++ Functions from Linux Dynamic Library / Linux Console App | Visual Studio Linux Projects

我想从Linux C ++ .so共享对象库中导出全局C ++函数,并在Linux C ++ .out应用程序中使用这些函数。

我看了一些在Linux开发环境中通常如何完成此操作的示例。 但是,我正在使用Visual Studio Linux项目和用于Linux开发的新Visual C ++扩展。 我相信我看到的示例中的许多步骤将由Visual Studio构建系统处理,因此在这种情况下情况似乎有些不同。

我在Visual Studio中创建了两个Linux C ++项目,一个空项目在属性和控制台应用程序中已更改为.so 我已经在控制台应用程序中引用了共享库。

共享库库项目有两个文件, functions.hfunctions.cpp

功能.h

#pragma once
void Function_01();

functions.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文件夹中找到

在用于Linux开发的Visual C ++(VCLinux)中,您将在“链接器/输入/库依赖关系”下的项目设置中指定库的名称, functions ,以及在“链接器/常规/附加”下可以找到该库的文件夹的路径。图书馆目录。 也就是说,就像将DLL与Windows应用程序链接时一样。

VCLinux提供了Visual Studio用户熟悉的开发环境。 但是值得注意的是,虽然VCLinux生成了g ++命令来编译和链接您的应用程序,但是您所学到的关于使用gcc在Linux上构建应用程序的任何知识都非常适用。 尽管您现在可以跳过makefile章节。

另请注意,VCLinux仍在开发中。 关于调试共享库(尤其是使用测试控制台应用程序)的调试存在多个问题-有关更多信息,请参见VCLinux GitHub项目页面 我们鼓励您保持积极的态度,并提供建设性的反馈意见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM