LINUX.ORG.RU

Ошибка при линковке | clion | C++

 ,


0

1

Доброго времени суток! Пытаюсь скомпилировать код с библиотекой scrypt с litecoin. Но при линкове появляются ошибки. Как решить?

/opt/clion/bin/cmake/bin/cmake --build /home/continue/.CLion2016.1/system/cmake/generated/untitled-ee2b67a2/ee2b67a2/Debug --target untitled -- -j 8
Scanning dependencies of target untitled
[ 50%] Building CXX object CMakeFiles/untitled.dir/main.cpp.o
[100%] Linking CXX executable untitled
CMakeFiles/untitled.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x28): undefined reference to `scrypt_1024_1_1_256(char const*, char*)'
collect2: error: ld returned 1 exit status
CMakeFiles/untitled.dir/build.make:94: ошибка выполнения рецепта для цели «untitled»
gmake[3]: *** [untitled] Ошибка 1
CMakeFiles/Makefile2:67: ошибка выполнения рецепта для цели «CMakeFiles/untitled.dir/all»
gmake[2]: *** [CMakeFiles/untitled.dir/all] Ошибка 2
CMakeFiles/Makefile2:79: ошибка выполнения рецепта для цели «CMakeFiles/untitled.dir/rule»
gmake[1]: *** [CMakeFiles/untitled.dir/rule] Ошибка 2
Makefile:118: ошибка выполнения рецепта для цели «untitled»
gmake: *** [untitled] Ошибка 2

#include <iostream>
#include "scrypt.h"
using namespace std;
int main(int , char* [])
{
    char output[200];
    scrypt_1024_1_1_256("hello world", output);
    cout << output << endl;
    return 0;
}
cmake_minimum_required(VERSION 3.4)
project(untitled)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)
set(HEADER scrypt.h)
add_executable(untitled ${SOURCE_FILES})
Заранее спасибо!

В каком именно месте ты линкуешь эту самую библиотеку и при чём тут вообще IDE? В блокноте не хочешь поработать? А мейкфайлы пописать ручками в том же блокноте?

anonymous ()

Для линковки в CMake необходимо добавить target_link_libraries.

Выглядит это так:

target_link_libraries (${PROJECT_TEST_NAME} ${LIBNAME_STATIC_FILES})

Что там с наличием CMake config или Find'а у твоей либы для litecoin - я хз. Общем, гугли по словам CMake target_link_libraries, CMake find_package и названием твоей либы.

Но, как мне кажется, тебе тут проще будет Makefile написать простейший с линковкой по путям на твоём компе.

Norgat ★★★★★ ()
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от Norgat

Обычная библиотека криптографии, которую нужно добавить в линковку.

continue ()
Ответ на: комментарий от continue

http://www.rapidtables.com/code/linux/gcc/gcc-l.htm

Если у тебя твоя либа уже собрана (а я так понимаю, что у тебя там студенческая возня), то это ещё глянь http://stackoverflow.com/questions/207069/how-to-link-using-gcc-without-l-nor...

Сначала добейся нормальной линковки в консоли, а потом собери все команды в Makefile. Что делать примерно описано тут: http://stackoverflow.com/questions/2481269/how-to-make-a-simple-c-makefile

Norgat ★★★★★ ()
Ответ на: комментарий от Norgat

Эмм, а зачем библиотеку собирать? (.so?). scrypt зависим от sha256, а в свою очередь sha256 от OpenSSL (который я поставил с пакетов OpenSUSE).
scrypt.cpp
scrypt.h

continue ()
Ответ на: комментарий от continue

Чувак, мозгами шевели слегка. Ну да, по ссылке там линкуют для .so. А тебе видимо надо либо собрать scrypt в виде .a или a. + .so и прилинковать результат (и добавить сверху линковку с openssl).

Давай, изучай тему «gcc линковка» в гугле, иначе будешь всё это воспринимать как чёрную магию.

Norgat ★★★★★ ()
Ответ на: комментарий от Norgat
continue@linux-5r5y:~/ClionProjects/untitled> gcc main.o -L -lfs /home/continue/scrypt_lib/scrypt.o -lssl
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: /home/continue/scrypt_lib/scrypt.o: неопределённая ссылка на символ «SHA256_Init»
/lib64/libcrypto.so.1.0.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

continue ()
Ответ на: комментарий от continue

А ты читал как openssl прилинковать? Везде пишут, что нужно линковать так: -lssl -lcrypto

У тебя же -lcrypto нет.

Norgat ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.