【问题标题】:Writing/Using C++ Libraries编写/使用 C++ 库
【发布时间】:2010-09-07 18:02:15
【问题描述】:

我正在寻找以下方面的基本示例/教程:

  1. 如何在 C++ 中编写/编译库(.so 文件适用于 Linux,.dll 文件适用于 Windows)。

  2. 如何在其他代码中导入和使用这些库。

【问题讨论】:

标签: c++


【解决方案1】:

代码

r.cc

#include "t.h"

int main()
{
    f();
    return 0;
}

t.h

void f();

t.cc

#include<iostream>
#include "t.h"    

void f()
{
    std::cout << "OH HAI.  I'M F." << std::endl;
}

但是如何,如何,如何?!

~$ g++ -fpic -c t.cc          # get t.o
~$ g++ -shared -o t.so t.o    # get t.so
~$ export LD_LIBRARY_PATH="." # make sure t.so is found when dynamically linked
~$ g++ r.cc t.so              # get an executable

如果您将共享库安装在全局库路径中的某处,则不需要export 步骤。

【讨论】:

  • 这是一个糟糕的解释。它在 Windows 上不起作用,甚至不会触及 Windows 添加到此的内容,并且会丢弃 LD_LIBRARY_PATH 中的所有内容...
  • @rubenvb 它确实适用于 Windows。你需要安装cygwin。
  • g++ -Wl,-rpath,\$ORIGIN r.cc t.so代替LD_LIBRARY_PATH
  • @Maxim Cygwin != Windows。 Cygwin 仍然需要 dllexport
  • @rubenvb 你关于 LD_LIBRARY_PATH 的观点应该澄清一下。这不会永久覆盖它,因为所有这些更改都是该特定 shell 的本地更改。假设这将在一个实际问题的 makefile 中,它只会在 make 生成的子 shell 中进行更改。这仍然不是最好的方法,但对于那些可能会感到困惑的人来说,这不会永远毁掉你的编译器。
猜你喜欢
  • 2019-01-06
  • 2016-07-05
  • 2012-05-21
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多