我在头文件imp.h中声明了一个函数foo(),并在imp.c中实现了它。然后我生成了一个名为libimp.so的共享库,在我的Pin工具中我调用了foo()。
为了将该工具与这个新库链接,我在其目录中添加了以下定义到makefile.rules:
TOOL_CXXFLAGS += -I/path/to/imp.h
TOOL_LPATHS += -L/path/to/libimp.so
TOOL_LIBS += -limp
我还将LD_LIBRARY_PATH设置为/path/to/libimp.so。但是,在运行时,如果我使用foo(),将收到以下错误:
dlopen failed. library "libimp.so" not found.
当我从一个简单的测试程序调用它时,库是可以的。有什么想法吗?
答案 0 :(得分:0)
我还将LD_LIBRARY_PATH设置为/path/to/libimp.so
如果libimp.so
的完整路径字面 /path/to/libimp.so
,那么LD_LIBRARY_PATH
的正确值为/path/to
,不是 /path/to/libimp.so
。
(从您的问题中不清楚您是否理解这一点。)
您可能希望将您的pintool与-Wl,--rpath=/path/to
相关联,这样您就不必设置LD_LIBRARY_PATH
。