嵌入mono sample:加载共享库时出错:libmonoboehm-2.0.so.1

时间:2015-01-07 02:54:05

标签: mono centos6 embedding

我已经通过make&& amp;从源代码安装 当我尝试这个样本时: https://github.com/mono/mono/blob/master/samples/embed/teste.c

在编译期间没有发生错误,但是当我运行时我得到了这个:

[root@WOH_Test t01]# gcc -o teste teste.c `pkg-config --cflags --libs mono-2` -lm
[root@WOH_Test t01]# mcs test.cs
[root@WOH_Test t01]# ./teste test.exe
./teste: error while loading shared libraries: libmonoboehm-2.0.so.1: cannot open shared object file: No such file or directory

我无法确定问题所在,任何线索?

1 个答案:

答案 0 :(得分:0)

  1. /usr/local/lib你有什么?如果您在命令--prefix之前运行autogen.sh时未使用make选项,则应在/usr/local/lib中找到库。您应该在该目录中看到类似这样的内容:

    me@mypc:/usr/local/lib$ ls -lah libmono-2.0.*
    lrwxrwxrwx. 1 me me 18 dic 19 00:38 libmono-2.0.a -> libmonoboehm-2.0.a
    lrwxrwxrwx. 1 me me 19 dic 19 00:38 libmono-2.0.la -> libmonoboehm-2.0.la
    lrwxrwxrwx. 1 me me 19 dic 19 00:38 libmono-2.0.so -> libmonoboehm-2.0.so
    lrwxrwxrwx. 1 me me 21 dic 19 00:38 libmono-2.0.so.1 -> libmonoboehm-2.0.so.1
    lrwxrwxrwx. 1 me me 25 dic 19 00:38 libmono-2.0.so.1.0.0 -> libmonoboehm-2.0.so.1.0.0
    
  2. 如果您在/usr/local/lib中看到上述库,则问题与ld搜索库的位置有关。从这个问题:CentOS /usr/local/lib system wide $LD_LIBRARY_PATH我猜Centos6没有/usr/local/lib的默认配置。如果是你的情况,只需在该问题中使用提供的解决方案(任何一个),你的程序应该可以正常工作。

  3. 修改

    如果您希望libmonoboehm-2.0.so.1teste计划位于同一路径中,并且您不想触及Centos6中的任何其他内容,则可以在评论中添加以下内容:

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/teste/binary
    ./teste test.exe
    

    但是我想知道运行这个命令时你有什么输出:pkg-config --cflags --libs mono-2(好像你已经在Centos6中安装了单声道)

    无论如何,如果你可以修改你的Centos6,最好的答案是:CentOS /usr/local/lib system wide $LD_LIBRARY_PATH。你这样做了一次,你就可以运行任何mono程序,而不必弄乱LD_LIBRARY_PATH环境变量。在您的情况下,您应该执行以下操作:

    1. Edit /etc/ld.so.conf
    2. Write this: /opt/mono/lib
    3. Run ldconfig -v as root
    4. Your Centos6 is ready to run your mono programs whenever you wish (even if you restart your Centos6 machine)
    

    结束编辑