Ошибка при компилировании undefined reference to? — Хабр Q&A

Что делать с ошибкой undefined reference to при передаче параметра в функцию?

Имеется Qt_5_3_MinGW_32bit, Windiws 7 64bit.

Работаю в графическом приложении QT.

В хэдере (mainwindow.h) обявлено следующее:

private:
    QString image_path;
    void separateImage(char* path_to_image);

Далее при нажатии на кнопку вызываю метод void separateImage(char* path_to_image);
mainwindow.cpp :
На кнопке написано следующее:

QByteArray ba = image_path.toUtf8(); //image_path - путь до картинки
    char *str;
    str = ba.data();
    separateImage(str); //тут компилятор говорит на ошибку

Возникающие ошибки:
D:QtProjectsLabArcheo_PartCeramicResiduesAsMosaicmainwindow.cpp:104: ошибка: undefined reference to `MainWindow::separateImage(char*)’
и
collect2.exe:-1: ошибка: error: ld returned 1 exit status

Данная ошибка возникает, если вместо char передавать QString, соответственно, изменив функцию separate_image.

Часть кода separate_image выглядит следующим образом:

void separateImage(char* path_to_image)
{
    Mat src;
    Mat src_gray;
    int thresh = 100;
    int max_thresh = 255;
    string path;
    path.assign(path_to_image, strlen(path_to_image));
    //string bufstr = path_to_image->toStdString();
   // qDebug("dddd %d",bufstr);
    src = cv::imread(path, 1);
    cvtColor(src, src_gray, CV_BGR2GRAY);
}

Compiler error in mingw-w64: ‘undefined reference to `__getreent.’

I’m currently in the (nightmare) task of trying to compile cImg and libjpeg in Windows. After many hours, I was finally able to build libjpeg and I’ve included it within the build process (cImg needs libjpeg to work with jpegs).

When I try to compile with ‘g image.cpp libjpeg.a -lgdi32’ I get the following error:

'jerror.c:112: undefined reference to `__getreent. The system cannot find the path specified.'

I’ve had a look on google but there doesn’t seem to be many people with the same issue (and fewer still with answers).

I’m compiling in windows using mingw-w64.

Undefined reference to template function

The implementation of a non-specialized template must be visible to a translation unit that uses it.

The compiler must be able to see the implementation in order to generate code for all specializations in your code.

:/>  Работа с реестром Windows из командной строки или BAT файла

This can be achieved in two ways:

1) Move the implementation inside the header.

2) If you want to keep it separate, move it into a different header which you include in your original header:

util.h

namespace Util
{
    template<class T>
    QString convert2QString(T type , int digits=0);
}
#include "util_impl.h"

util_impl.h

namespace Util
{
    template<class T>
        QString convert2QString(T type, int digits=0)
        {
            using std::string;

            string temp = (boost::format("%1") % type).str();

            return QString::fromStdString(temp);
        }
}

Undefined reference to?

В проект не включили файл methods.cpp. Потому линкер говорит, что нет этих функций.

Язык Си (как, впрочем, и большинство ассемблеров) собирает cpp-файлы воедино неязыковыми средствами: makefile’ами и файлами проектов. Сначала компилятор обрабатывает все единицы компиляции отдельно друг от друга, а потом линкер собирает из того, что получилось, исполняемый файл. Разумеется, если где-то какой-то функции не нашлось, это можно опознать только при линковке.

Ошибка при компилировании undefined reference to?

При выполнение этого кода должен отправится POST запрос на IP адрес имеющегося оборудования с содержанием аудио файла в теле запроса.
Вот полный код программы:

//#include "stdafx.h"

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <fcntl.h>
#include <netinet/tcp.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <pulse/simple.h>
#include <pulse/error.h>

#define BUFSIZE 320

#define BLOCKSIZE 512
int fd;

int socket_connect(const char *host, in_port_t port) {
	printf("Connect to: %sn", host);
	struct hostent *hp;
	struct sockaddr_in addr;
	int on = 1, sock;

	if ((hp = gethostbyname(host)) == NULL) {
		herror("gethostbyname");
		return (-1);
	}
	bcopy(hp->h_addr, &addr.sin_addr, hp->h_length);
	addr.sin_port = htons(port);
	addr.sin_family = AF_INET;
	sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
	setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (const char *) &on, sizeof(int));

	if (sock == -1) {
		perror("setsockopt");
		return (-1);
	}
	if (connect(sock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in))
			== -1) {    
		perror("connect");
		return (-1);
	}
	return sock;
}

int main(int argc, char*argv[]) {
  
char *servermessage;	
const char *header = "POST /cgi-bin/transmitaudio_cgi?user=admin&pwd=Admin123 HTTP/1.1rnConnection: Keep-AlivernContent-Type: G.711U;boundary=audiornrn";
const char *audio = "--audio";
fd = socket_connect("192.168.2.38", atoi("80"));

write(fd, header, strlen(header));

/* The Sample format to use */
static const pa_sample_spec ss = {
    .format = PA_SAMPLE_ULAW,
    .rate = 8000,
    .channels = 1
};

pa_simple *s_in, *s_out = NULL;
int ret = 1;
int error;


/* Create a new playback stream */
if (!(s_out = pa_simple_new(NULL, argv[0], PA_STREAM_PLAYBACK, NULL, "playback", &ss, NULL, NULL, &error))) {
    fprintf(stderr, __FILE__": pa_simple_new() failed: %sn", strerror(errno));
    goto finish;
}

  if (!(s_in = pa_simple_new(NULL, argv[0], PA_STREAM_RECORD, NULL, "record", &ss, NULL, NULL, &error))) {
    fprintf(stderr, __FILE__": pa_simple_new() failed: %sn", strerror(errno));
    goto finish;
}

for (;;) {
    uint8_t buf[BUFSIZE];
    ssize_t r;

    if (pa_simple_read(s_in, buf, sizeof(buf), &error) < 0) {

        fprintf(stderr, __FILE__": read() failed: %sn", strerror(errno));
        goto finish;
    }

    if(write(fd, buf, BUFSIZE) != BUFSIZE)
            printf("nErrn");
    if(write(fd, audio, 7) != 7)
            printf("nErrn");*/
    
    if (pa_simple_write(s_out, buf, sizeof(buf), &error) < 0) {
        fprintf(stderr, __FILE__": pa_simple_write() failed: %sn", strerror(errno));
        goto finish;
    }
}

/* Make sure that every single sample was played */
if (pa_simple_drain(s_out, &error) < 0) {
    fprintf(stderr, __FILE__": pa_simple_drain() failed: %sn", strerror(errno));
    goto finish;
}

ret = 0;

finish:

if(fd){
    shutdown(fd, SHUT_RDWR);
    close(fd); 
}

if (s_in)
    pa_simple_free(s_in);
if (s_out)
    pa_simple_free(s_out);

return ret;
}

Код был написан разработчиками оборудования, они утверждают, что он должен без проблем работать. В итоге были ошибки, я их исправил, но это не знаю как решить.

:/>  Как восстановить реестр Windows 7 без резервной копии и Windows 7 перестала работать? Не спешите переустанавливать! Прочтите эту статью и узнайте, как правильно и быстро восстановить Windows 7 из резервной копии

Оставьте комментарий