C++ 如何在eclipse中使用动态库?

C++ 如何在eclipse中使用动态库?,c++,eclipse,eclipse-cdt,dynamic-linking,C++,Eclipse,Eclipse Cdt,Dynamic Linking,下面是我用clang++做的一个小例子: ===filename=== calc_mean.cpp ===filename=== ===filecontent=== double mean(double a, double b) { return (a+b) / 2; } ===filecontent=== ===filename=== calc_mean.h ===filename=== ===filecontent=== double mean(doub

下面是我用clang++做的一个小例子:

===filename===
calc_mean.cpp
===filename===



===filecontent===


double mean(double a, double b) {
  return (a+b) / 2;
}


===filecontent===





===filename===
calc_mean.h
===filename===



===filecontent===


double mean(double, double);


===filecontent===





===filename===
commands.sh
===filename===



===filecontent===


#/usr/bin/env bash

clang++ -c calc_mean.cpp -o calc_mean.o
ar rcs libmean.a calc_mean.o
clang++ -c -fPIC calc_mean.cpp -o calc_mean.o
gcc -shared -W1,-soname,libmean.so.1 -o libmean.so.1.0.1  calc_mean.o
clang++ main.cpp -L. -lmean -o dynamicmain -v


===filecontent===





===filename===
main.cpp
===filename===



===filecontent===


#include <stdio.h>
#include "calc_mean.h"

int main(int argc, char const* argv[])
{
    double v1, v2, m;
    v1 = 5.0;
    v2 = 6.0;
    m = mean(v1, v2);
    printf("Mean: %f\n", m);
    return 0;
}


===filecontent===
Edit2: 我突然意识到你在Mac上,我记得库加载有点滑稽。所以,有两个原因可以解释为什么找不到图像。下面的内容仍然适用,但它可能失败还有另一个原因。看

我不知道Mac上的eclipse是否附带GCC,或者它是否只在该平台上运行,但请尝试设置DYLD_LIBRARY_PATH作为快速测试,看看它是否只是Mac的特殊之处

编辑: 耶,它编译了!现在我们遇到了一个链接错误。这一个实际上很有趣,不是我下面列出的“普通”符号(即未解析符号)。此错误“未找到映像”通常意味着链接器找到了库,但无法使用它,因为它是以不兼容的方式编译的

为什么它的格式不兼容?欢迎来到我讨厌的C++的一个特性,并且其中的每一个库都提供了一个C接口而不是C++接口。 C++不提供稳定的ABI(应用程序二进制接口)。这意味着使用不同编译器编译的库(甚至是同一编译器的不同版本)可能无法协同工作。99/100它们将完全拒绝链接/工作,但即使它们确实链接,您也会变得非常奇怪,很难找到bug,等等

<太长了,读不下去了。DR:如果你想把你的静态库作为C++(我推荐),并有一个C++接口,你需要确保编译器的完全相同版本被用来编译你的应用程序和静态库。最简单的方法是让Eclipse同时构建静态库和应用程序。 <>这是希望随着下一个版本的C++改变的,正如赫伯-萨特提出的创建一个定义C++的ABI平台的建议。 原件: 你需要把包含CalcIsMy.h的文件夹添加到C++生成的“附加包含”中。你可以把包含语句看作是在那个精确行上剪切和粘贴文件的内容。错误是“嘿,我去找一个叫做CalcMyMeal.h的文件,找不到它”。(因此main.cpp知道该函数)

如果说“未解析的符号”是一个错误,并且符号在您的库中,那么您就知道您在添加库或库路径(-L)时出错了


Cmake是一个很好的工具,但是知道如何使用ide很好。基本步骤(添加库名、添加库路径、添加包含库头的目录)在eclipse、netbeans、visual studio、xcode等中都是相同的)

它仍然无法解决该函数。请参阅我对问题的编辑。
dyld: Library not loaded: libmean.so
  Referenced from: /Users/kaiyin/personal_config_bin_files/workspace/testuselib/Debug/testuselib
  Reason: image not found