WedX - журнал о программировании и компьютерных науках

Невозможно скомпилировать приложение C++ с помощью OpenSll в Linux

У меня установлен gcc:

$ gcc --version gcc (GCC) 8.2.1 20180831 Copyright (C) Free Software Foundation, Inc., 2018 г. Это бесплатное программное обеспечение; см. источник условий копирования. НЕТ гарантии; даже не для КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ.

Я пытаюсь скомпилировать это:

    #include <iostream>
    #include <openssl/sha.h>

    bool my_sha256(void* input, unsigned long length, unsigned char* md) {
        SHA256_CTX context;
        if (!SHA256_Init(&context)) {
            return false;
        }

        if (!SHA256_Update(&context, (unsigned char*)input, length)) {
            return false;
        }

        if (!SHA256_Final(md, &context)) {
            return false;
        }

        return true;
    }

    int main(int argc, const char * argv[]) {
        // ...........

        return 0;
    }

Ошибка компиляции:

  $ gcc main.cpp 
  /usr/bin/ld: /tmp/ccde3c1g.o: in function `my_sha256(void*, unsigned long, unsigned char*)':
  main.cpp:(.text+0x37): undefined reference to `SHA256_Init'
  /usr/bin/ld: main.cpp:(.text+0x64): undefined reference to `SHA256_Update'
  /usr/bin/ld: main.cpp:(.text+0x8a): undefined reference to `SHA256_Final'
  /usr/bin/ld: /tmp/ccde3c1g.o: in function `main':
  main.cpp:(.text+0xd2): undefined reference to `std::cout'
  /usr/bin/ld: main.cpp:(.text+0xd7): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
  /usr/bin/ld: /tmp/ccde3c1g.o: in function `__static_initialization_and_destruction_0(int, int)':
  main.cpp:(.text+0x107): undefined reference to `std::ios_base::Init::Init()'
  /usr/bin/ld: main.cpp:(.text+0x11c): undefined reference to `std::ios_base::Init::~Init()'
  collect2: error: ld returned 1 exit status

Как это исправить?

21.10.2018

  • g++ -lcrypto main.cpp (при условии, что у вас есть библиотеки OpenSSL в вашем пути к библиотекам). Вам не хватает ссылки на libcrypto.so, и вам не хватает ссылки на выбранную среду выполнения C++, потому что вы используете gcc, а не g++. 21.10.2018
  • @WhozCraig хорошо. вообще я должен использовать gcc или g++ для приложений C++? 21.10.2018
  • @WhozCraig в Linux компилируется, а на Mac нет, библиотека не находится. Но он установлен. Как мне указать полный путь к нему? 21.10.2018
  • openssl больше не является частью macos, как и sierra. Если вы хотите использовать его, вам придется установить или собрать его самостоятельно. Прочитайте это для получения дополнительной информации. 21.10.2018
  • @WhozCraig Я сказал - он установлен. Как использовать полный путь? 22.10.2018

Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]