Ошибка компоновщика неопределенная ссылка C++

Я создал проект в 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;
}

Как решить проблему??

3 ответа

Это точно, что он не может найти ссылки.lib, содержащие функцию dwt_sym(). Необходимо проверить путь в свойствах проекта (параметры компоновщика).

Вы можете указать точный путь (жесткий код), чтобы проверить его. Как только это сработает, измените его на правильный относительный путь.

Также проверьте свою текущую конфигурацию. Возможно, вы дали имя библиотеки в Debug. Но, возможно, строительный релиз.

Вот как я решил проблему.

  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.h а также wavelet2d.cpp в вашу рабочую папку.

вы можете найти эти два файла из wavelib

  1. установить библиотеку fftw.

ты можешь гуглить fftw, Легко скачать и установить библиотеку fftw.

  1. компиляции:

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

Вы уверены, что функция dwt_sym принимает все эти векторы как входы или выходы? Убедитесь, что типы вводимых вами данных точно совпадают с типами в объявлении функции dwt_sym (при условии, что он находится во внешнем заголовочном файле, который здесь не виден).

[РЕДАКТИРОВАТЬ] Я только что понял, что ошибка компоновщика означает, что он успешно скомпилирован, что означает, что были предоставлены правильные данные. Убедитесь, что вы не ссылаетесь на неверную версию библиотеки или используете неверный путь к библиотеке.

Другие вопросы по тегам