crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> CMake. Линковка статической библиотеки, CMake. Линковка статической библиотеки
demon051
  опции профиля:
сообщение 23.9.2021, 10:48
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 12.8.2014
Пользователь №: 4209

Спасибо сказали: 4 раз(а)




Репутация:   0  


Всем привет.
Попал в какую-то глупую ситуацию...
На пальцах.
Есть либа для примера с одной функцией hello, выводящей текст

//lib.c
#include <stdio.h>
#include <lib.h>

void hello()
{
printf("Hello world! I'm static library\n");

}


//lib.h
#ifndef LIB_H
#define LIB_H

void hello();
#endif // LIB_H



Собирается как статическая
#CMAkeLists.txt
project(mylib)
set(SOURCES lib.c)
set(HEADERS lib.h)
add_library(mylib ${SOURCES} ${HEADERS})
target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})


Всё ок.
Получается файл libmylib.a

Теперь пытаюсь связать его с проектом, например
#include <iostream>
#include "lib.h"
using namespace std;
void hello();
int main(int argc, char *argv[])
{
    cout << "Hello World!" << endl;
    hello();
    return 0;
}


Файл для сборки такой
#CMAkeLists.txt
cmake_minimum_required(VERSION 2.8)

project(TestLib)

option(USE_STATIC "Use static library" ON)

find_library(MYLIBRARY mylib /home/user/projects/TestLib/mylib/build-mylib-armhf-Default)

message("--------------------------------------------")
message(lib path = ${MYLIBRARY})
message("--------------------------------------------")


add_executable(TestLib "main.cpp")

target_link_libraries(TestLib PRIVATE ${MYLIBRARY})

target_include_directories(TestLib PUBLIC ${PROJECT_SOURCE_DIR}/mylib)


При попытке собрать проект получаю сообщение

/home/user/projects/TestLib/main.cpp:-1: error: undefined reference to `hello()'


И впадаю в ступор )) Что не так???

Сообщение отредактировал demon051 - 23.9.2021, 10:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
demon051
  опции профиля:
сообщение 23.9.2021, 12:06
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 12.8.2014
Пользователь №: 4209

Спасибо сказали: 4 раз(а)




Репутация:   0  


Цитата(demon051 @ 23.9.2021, 10:48) *
Всем привет.
Попал в какую-то глупую ситуацию...
На пальцах.
Есть либа для примера с одной функцией hello, выводящей текст

//lib.c
#include <stdio.h>
#include <lib.h>

void hello()
{
printf("Hello world! I'm static library\n");

}


//lib.h
#ifndef LIB_H
#define LIB_H

void hello();
#endif // LIB_H



Собирается как статическая
#CMAkeLists.txt
project(mylib)
set(SOURCES lib.c)
set(HEADERS lib.h)
add_library(mylib ${SOURCES} ${HEADERS})
target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})


Всё ок.
Получается файл libmylib.a

Теперь пытаюсь связать его с проектом, например
#include <iostream>
#include "lib.h"
using namespace std;
void hello();
int main(int argc, char *argv[])
{
    cout << "Hello World!" << endl;
    hello();
    return 0;
}


Файл для сборки такой
#CMAkeLists.txt
cmake_minimum_required(VERSION 2.8)

project(TestLib)

option(USE_STATIC "Use static library" ON)

find_library(MYLIBRARY mylib /home/user/projects/TestLib/mylib/build-mylib-armhf-Default)

message("--------------------------------------------")
message(lib path = ${MYLIBRARY})
message("--------------------------------------------")


add_executable(TestLib "main.cpp")

target_link_libraries(TestLib PRIVATE ${MYLIBRARY})

target_include_directories(TestLib PUBLIC ${PROJECT_SOURCE_DIR}/mylib)


При попытке собрать проект получаю сообщение

/home/user/projects/TestLib/main.cpp:-1: error: undefined reference to `hello()'


И впадаю в ступор )) Что не так???


Тема закрыта, всем спасибо, разобрался ))))))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.10.2021, 8:36