-1

我在 dev c++ 中创建了一个项目。编译时出现此错误。

[链接器错误] 对 `dwt_sym(std::vector >&, int, std::string, std::vector >&, std::vector >&, std::vector >&)' 的未定义引用

这是我的代码:

#include <iostream>
#include <fstream>
#include "wavelet2d.h"
#include <vector>
#include <string>
#include <cmath>
using namespace std;

int main() {
    cout << "********J- LEVEL DISCRETE WAVELET TRANSFORM IMPLEMENTATION*********"; 
        cout << "This program accepts signal from the user in a file format " << endl;
        cout << "and performs Discrete Wavelet Transform with specified   " << endl;
        cout << "wavelet. "                                               << endl;
        cout << "                                                             " <<endl;
        cout << " The Following Wavelets are in the Database:                 " <endl;
        cout << " haar, db1, db2, db3, db4, db5, db6, db7, db8, db9, db10,  "   <<endl;
        cout << " db11, db12, db13, db14, db15.                               " <<endl;
        cout << " bior1.1, bio1.3, bior1.5, bior2.2, bior2.4,bior2.6,bior2.8, " <<endl;
        cout << " bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4,"        <<endl;
        cout << " bior5.5, bior6.8."                                            <<endl;
        cout << " coif1, coif2, coif3, coif4, coif5."                           <<endl;
        cout << "Please Enter the Wavelet Name at the Prompt( No quotes)     :" <<endl;

        string nm; // nm will store the name of Wavelet Family
        cin >> nm;
        cout << "Enter the name of signal file at the Prompt eg., signal.txt :" <<endl;
        char inp[50];
        cin >> inp;
        vector<double> sig;
        ifstream sig_inp(inp);
        if ( !sig_inp.good()){
            cout << "The File doesn't exist"<< endl;
        }
        while (sig_inp) {
            double temp;
            sig_inp >> temp;
            sig.push_back(temp);
        }
        sig.pop_back();
        vector<double> original;
        original = sig;
        cout << "Please Enter the Number of DWT Stages J             :" << endl;

        int J;
        cin >> J ;

        vector<double> dwt_output, flag;

        // perform J-Level DWT
        vector<int> length;

        dwt_sym(sig, J, nm, dwt_output,flag,length);
            ofstream dwtout("dwtout.txt");
            for (unsigned int i = 0; i < dwt_output.size(); i++){
             dwtout << dwt_output[i] << endl;

        }


        //Perform J-Level IDWT
        vector<double> output;
        idwt_sym(dwt_output, flag,nm,output,length);

        ofstream sig1("recon.txt");
        ofstream diff("diff.txt");

        cout <<" Recon signal size" << output.size() << endl;
        for (unsigned int i = 0; i < output.size(); i++){
            sig1 << output[i] << endl;
            diff << output[i] - original[i] << endl;

        }
        //gnudwtplot(J);
        return 0;
}

怎么解决问题??

4

3 回答 3

0

您确定 dwt_sym 函数将所有这些向量作为输入或输出吗?确保您提供的输入类型与 dwt_sym 函数声明中的类型完全匹配(假设它位于此处无法看到的外部头文件中)。

[编辑] 我刚刚意识到链接器错误意味着它编译成功,这意味着提供了正确的输入。检查以确保您没有链接到错误版本的库或使用错误的库路径。

于 2013-11-29T04:28:47.567 回答
0

这是肯定的,它找不到包含 dwt_sym() 函数的 .lib 引用。您必须检查项目属性(链接器选项)中的路径。

您现在可能想给出确切的路径(硬编码)来测试它。一旦它工作,将其更改为正确的相对路径。

还要检查您当前的配置。您可能已经在 Debug 中给出了库名称。但可能正在构建发布。

于 2013-11-29T05:00:27.637 回答
0

这就是我解决问题的方法。

  1. 按照此处的工作说明进行操作:http ://wavelet2d.sourceforge.net/

特别是:在LINUX环境下工作

ln -sf libwavelet2d.so.1.0 libwavelet2d.so

ln -sf libwavelet2d.so.1.0 libwavelet2d.so.1

export LD_LIBRARY_PATH="your working folder"

  1. 复制wavelet2d.hwavelet2d.cpp进入您的工作文件夹。

你可以从wavelib中找到这两个文件

  1. 安装 fftw 库。

你可以谷歌fftw。fftw 库很容易下载和安装。

  1. 编译:

$ g++ XXX.cpp wavelet2d.cpp -lm -lfftw3

于 2015-01-15T09:43:29.770 回答