我为一个名为程序B的新程序制作了一个用于程序A的makefile副本。为了简单起见,程序B具有与程序A相同的所有include指令。对新makefile所做的唯一更改是对象文件列表和创建的可执行文件的名称的明显更改。我也可以确定编译错误不是由main()或程序B的任何函数引起的。但是当我使用make命令时,我有一个错误:
/usr/local/triclops/lib/libtriclops.a(triclops.o): In function `triclopsGetDynamicLibPath':
triclops.cpp:(.text+0x198): undefined reference to `dladdr'
在我的作品中,我有以下相关内容:
CPPFLAGS+=-I/usr/local/triclops/include
LDLIBS+=-L/usr/local/triclops/lib
LDLIBS+=-lpgrlibdcstereo -ltriclops -lpnmutils
我感谢你的帮助,所以提前谢谢。我对makeflies知之甚少,所以我只是想有效地重用代码。
修改
程序A和程序B都有相同的include指令
#include "stereoCamera.h"
#include "Aria.h"
#include <iostream>
#include <cstdio>
#include <cv.h>
#include <highgui.h>
#include <cmath>
#include <vector>
#include <opencv2/highgui/highgui.hpp>
程序B基本上可以被认为是加上一个空的int main(){return0;},而程序A确实包含很多代码并且已经工作了很长时间。
答案 0 :(得分:0)
您可以尝试将libdl
与添加到第二个-ldl
行的LDLIBS+=
联系起来。您可能还需要将libdl.so
通常为/usr/lib/
的路径添加到第一个LDLIBS+=
行。
我无法回答为什么程序A使用'相同'的makefile编译,而程序B在没有查看程序或makefile的情况下失败。