Hitrou
@Hitrou
Начинающий программист)

Почему линковщик не видит функцию из статической библиотеки?

Работаю в Kubuntu. Для одного проекта потребовалось написать собственную статическую библиотеку на си и добавить ее к проекту qt. Компилятор gcc.
Собственно отчет об ошибке:
g++ -Wl,-rpath,/opt/Qt/5.11.0/gcc_64/lib -o M_un main.o mainwindow.o moc_mainwindow.o   -L/./lib/libmy2.a -L/opt/Qt/5.11.0/gcc_64/lib -lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread 
mainwindow.o: In function `MainWindow::MainWindow(QWidget*)':
/home/aleksandr/build-M_un-Desktop_Qt_5_11_0_GCC_64bit-Debug/../M_un/mainwindow.cpp:22: undefined reference to `show_sign'
collect2: error: ld returned 1 exit status
Makefile:258: recipe for target 'M_un' failed
make: *** [M_un] Error 1

Ну и файлы:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include "string.h"

extern "C"
{
    #include <mylib.h>

}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QString s;
    ui->setupUi(this);
    unsigned int sign;
    float x;
    bool ok;
    x = 34.7;
    sign = show_sign(x);
    s = QString::number(sign);
    ui->sign->setText(s);
}

MainWindow::~MainWindow()
{
    delete ui;
}

M_un.pro
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = M_un
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS


SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui
INCLUDEPATH += ./lib
LIBS += -L/./lib/libmy2.a

project_lib.c (в процессе сборки переименовывается в libmy2.a)
#include <stdlib.h>
 unsigned int show_sign(float x)
{
	float f = x;
	unsigned int* p = (unsigned int*) &f;
	unsigned int k = 2147483648;
	unsigned int u = (p[0] & k)/k;
	return u;
}

libmy2.h
extern unsigned int show_sign(float x);
Вот такая вот беда. Уже облазил кучу форумов никак решение найти не могу.
  • Вопрос задан
  • 1030 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Выкинуть -L из -L/./lib/libmy2.a.
-L/./lib/libmy2.a говорит "искать библиотеки в каталоге /./lib/libmy2.a, но во-первых это не каталог, а во-вторых нигде не говорится, что нужно линковать с библиотекой libmy2.a.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы