0

我为一个名为程序 B 的新程序制作了一个适用于程序 A 的 makefile 的副本。为了简单起见,程序 B 与程序 A 具有所有相同的包含指令。对新 makefile 所做的唯一更改是对目标文件列表和创建的可执行文件的名称。我还可以确定编译错误不是由 main() 中的任何内容或程序 B 的任何函数引起的。但不知何故,当我使用 make 命令时出现错误:

/usr/local/triclops/lib/libtriclops.a(triclops.o): In function `triclopsGetDynamicLibPath':
triclops.cpp:(.text+0x198): undefined reference to `dladdr'

在我的 makeflie 中,我有以下相关行:

CPPFLAGS+=-I/usr/local/triclops/include

LDLIBS+=-L/usr/local/triclops/lib

LDLIBS+=-lpgrlibdcstereo -ltriclops -lpnmutils

感谢您的帮助,因此在此先感谢您。我对makeflies了解不多,所以我只是想有效地重用代码。

编辑

程序 A 和程序 B 都具有相同的包含指令

#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 本质上可以认为是 this 加上一个空的 int main(){ return0;},而程序 A 确实包含很多代码并且已经工作了很长一段时间。

4

1 回答 1

0

您可以尝试libdl-ldl添加到您的第二LDLIBS+=行的链接。您可能还需要将路径libdl.so通常添加/usr/lib/到第一LDLIBS+=行。

我无法回答为什么程序 A 使用“相同”的 makefile 进行编译,而程序 B 在不查看程序或 ma​​kefile 的情况下失败。

于 2015-08-12T21:17:29.483 回答