标签: shared-objects

ld找不到现有的库

我试图在这个Debian lenny系统上将应用程序与g ++链接起来.ld抱怨它无法找到指定的库.这里的具体示例是ImageMagick,但我也遇到了类似的问题.

我正在调用链接器:

g++ -w (..lots of .o files/include directories/etc..) \
-L/usr/lib -lmagic
Run Code Online (Sandbox Code Playgroud)

ld抱怨:

/usr/bin/ld: cannot find -lmagic
Run Code Online (Sandbox Code Playgroud)

然而,libmagic存在:

$ locate libmagic.so
/usr/lib/libmagic.so.1
/usr/lib/libmagic.so.1.0.0
$ ls -all /usr/lib/libmagic.so.1*
lrwxrwxrwx 1 root root    17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0
-rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0
$ ldd /usr/lib/libmagic.so.1.0.0 
    linux-gate.so.1 =>  (0xb7f85000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb7f51000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7df6000)
    /lib/ld-linux.so.2 (0xb7f86000)
$ sudo ldconfig -v | grep "libmagic"
    libmagic.so.1 -> libmagic.so.1.0.0
Run Code Online (Sandbox Code Playgroud)

我如何进一步诊断这个问题,哪些可能是错的?我做的事情完全是愚蠢的吗?

linux linker gcc shared-libraries shared-objects

163
推荐指数
5
解决办法
59万
查看次数

命令行查看内容共享对象模块(lib*.so)

查看共享对象模块(lib*.so)内容的命令行是什么?

就像我们如何使用:

ar -t lib*.a
Run Code Online (Sandbox Code Playgroud)

for archives(lib*.a),它显示库中的所有目标文件.

EDIT1

ar -t lib*.a
Run Code Online (Sandbox Code Playgroud)

给我一个展示:

asset.o

sldep.o

c linux dll shared-objects

29
推荐指数
3
解决办法
4万
查看次数

Linux相当于DllMain

在*nix .so库中,是否有一个入口点在系统加载和卸载时由系统调用?

更实际的说明:如果.so是用C++编写的,它包含带有构造函数和析构函数的全局对象,并且它是从没有构造/破坏概念的语言加载的,那么全局对象是否正确构造/破坏了?

c++ shared-libraries shared-objects

22
推荐指数
3
解决办法
1万
查看次数

如何在C++中加载共享对象?

我有一个共享对象(因此 - 相当于Windows dll的Linux),我想导入并使用我的测试代码.

我确定这不是那么简单;)但这是我想做的事情..

#include "headerforClassFromBlah.h"

int main()
{
    load( "blah.so" );

    ClassFromBlah a;
    a.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

我认为这是一个非常基本的问题,但是在搜索网页时我找不到任何跳出来的东西.

c++ load shared-objects

20
推荐指数
3
解决办法
4万
查看次数

无法打开共享对象文件

我正在尝试编译这里找到的项目之一USB-I2C/SPI/GPIO接口适配器.

我下载了i2c_bridge-0.0.1-rc2.tgz包.我安装了libusb,似乎没有任何问题.我进入i2c_bridge-0.0.1-rc2/目录并制作.编译.我进入i2c_bridge-0.0.1-rc2/i2c文件夹并制作.它编译并给我./i2c.但是,当我运行它时,它说error while loading shared libraries: libi2cbrdg.so: cannot open shared object file: No such file or directory

makefile中i2c_bridge-0.0.1-rc2/i2c的库目录为../.在libi2cbrdg.so此目录中(i2c_bridge-0.0.1-rc2).我也把文件复制到了/usr/local/lib.一个ls在的i2c_bridge-0.0.1-rc2/目录

i2c        i2cbrdg.d  i2cbrdg.o  libi2cbrdg.a   Makefile  tests
i2cbrdg.c  i2cbrdg.h  INSTALL    libi2cbrdg.so  README    u2c4all.sh
Run Code Online (Sandbox Code Playgroud)

(那i2c是一个目录)

如果我sudo ./i2c,它仍然给我问题.

我不得不在所有makefile中删除-Werror-noWdecrepated(拼写?)选项以使它们进行编译,但这不应该影响它吗?

找到.so文件还需要什么?如果有人能帮我找出问题所以我会非常感激.如果需要更多信息,我可以发布.

debian build find shared-objects

16
推荐指数
3
解决办法
5万
查看次数

未在同一SWF中接收多个SharedObject的onSync删除事件

我有一个使用远程SharedObjects的应用程序,我看到一些奇怪的行为.我正在使用Flash Builder在AS3中编写ActionScript应用程序并连接到Wowza Media Server 2.

我的应用程序工作得很好但我现在正在尝试使用FlexUnit为它编写单元测试.我的单元测试涉及创建到同一个远程SharedObject的多个连接,并确保我正确地获得更新.一切似乎都运行良好,除了我没有得到任何带有"删除"的info.code的SyncEvent.SYNC事件.当我在单独的选项卡中独立运行应用程序或甚至在同一页面中嵌入的单独swfs时,它可以正常工作.出于某种原因,虽然它在单元测试中不起作用.我还发现,如果我在同一个SWF中使用Loader加载swfs,那么我会得到相同的行为.在我看来,同一个SharedObject在同一个SWF中的行数是多方面的.我不得不在单元测试中解决其他奇怪的行为,例如oldValues也没有在onSync事件中正确设置.

任何人有任何想法如何解决这个问题?这是一个已知的问题?我疯了吗?:)

非常感谢任何帮助!

flash-media-server actionscript-3 shared-objects wowza

13
推荐指数
1
解决办法
556
查看次数

Ruby进程中的共享变量

我有一个Ruby程序,它加载了两个非常大的yaml文件,因此我可以通过分离一些进程来利用多个核心来获得一些加速.我试过看,但我无法确定如何,或者即使我可以在不同的进程中共享变量.

以下代码是我目前拥有的代码:

@proteins = ""
@decoyProteins = "" 

fork do
  @proteins = YAML.load_file(database)
  exit
end

fork do
  @decoyProteins = YAML.load_file(database)
  exit
end

p @proteins["LVDK"]
Run Code Online (Sandbox Code Playgroud)

P 因为分叉而显示为零.

那么分叉进程是否可以共享变量?如果是这样,怎么样?

ruby process shared-objects

11
推荐指数
1
解决办法
9387
查看次数

共享对象在主二进制文件C++中找不到符号

我正在尝试为我编写的程序制作一种插件架构,并且在我第一次尝试时遇到了问题.是否可以从共享对象中访问主可执行文件中的符号?我认为以下情况会很好:

testlib.cpp:

void foo();
void bar() __attribute__((constructor));
void bar(){ foo(); }
Run Code Online (Sandbox Code Playgroud)

testexe.cpp:

#include <iostream>
#include <dlfcn.h>

using namespace std;

void foo()
{
    cout << "dynamic library loaded" << endl;    
}

int main()
{
    cout << "attempting to load" << endl;
    void* ret = dlopen("./testlib.so", RTLD_LAZY);
    if(ret == NULL)
        cout << "fail: " << dlerror() << endl;
    else
        cout << "success" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

g++ -fPIC -o testexe testexe.cpp -ldl
g++ --shared -fPIC -o testlib.so testlib.cpp
Run Code Online (Sandbox Code Playgroud)

输出:

attempting …
Run Code Online (Sandbox Code Playgroud)

c++ shared-objects dlopen

11
推荐指数
1
解决办法
3158
查看次数

链接器如何知道在运行时应该解析哪些符号?

链接器如何知道在运行时应该解析哪些符号?特别是我感兴趣的是共享对象文件携带的信息,指示链接器在运行时解析符号.动态符号解析在运行时如何工作,即可执行文件将用于查找符号,以及定义了多个具有相同名称的符号?

如果文件只是静态链接会发生什么,但是它在运行时作为共享库的一部分动态链接?可执行文件将使用哪个符号?换句话说,是否可以通过将这些符号链接到共享库来覆盖可执行文件中的符号?

有问题的平台是SUN OS.

c++ shared-libraries shared-objects

10
推荐指数
1
解决办法
4060
查看次数

有没有办法在不加载的情况下读取.so文件的内容?

有没有办法在不加载的情况下读取.SO(共享对象)文件的内容?

我的用例场景是:

  1. 我在Windows上有一个.so文件.我需要查询一些方法,无论它们是否存在于.so中.
  2. 要了解.so文件中的所有类.
  3. 给定一个类名需要找到这个类的所有方法.

注意:我可以轻松地在DLL上执行这些操作.我也在Windows上工作,所以我无法加载.SO文件.

谢谢

c++ shared-libraries shared-objects

10
推荐指数
2
解决办法
3万
查看次数