Задать вопрос
@Mars36

Как использовать библиотеки из С в С++ под windows?

Хочу использовать с_toxcore в своем проекте. Репозиторий либы:https://github.com/TokTok/c-toxcore
использую код из примера https://wiki.tox.chat/developers/client_examples/e...
При компиляции возникают ошибки с библиотеками. Библиотеки были собраны с ключем Win32 из за того, что уже собранные зависимости для этой либы были собраны с данным ключем. Если я пытаюсь собрать свой проект с таким же ключем вылетает только больше ошибок.
ошибки

"F:\code\C++\untitled2\build\ALL_BUILD.vcxproj" (default target) (1) ->
"F:\code\C++\untitled2\build\untitled2.vcxproj" (default target) (3) ->
(Link target) ->
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp_sodium_bin2hex в функции "void __cdecl start(v
oid)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp_sodium_hex2bin в функции "void __cdecl start(v
oid)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_new в функции "void __cdecl start(void)" (?start
@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_kill в функции "void __cdecl start(void)" (?star
t@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_bootstrap в функции "void __cdecl start(void)" (
?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_callback_self_connection_status в функции "void
__cdecl start(void)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_iteration_interval в функции "void __cdecl start
(void)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_iterate в функции "void __cdecl start(void)" (?s
tart@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_self_get_address в функции "void __cdecl start(v
oid)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_self_set_name в функции "void __cdecl start(void
)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_self_set_status_message в функции "void __cdecl
start(void)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_friend_add_norequest в функции "void __cdecl fri
end_request_cb(struct Tox *,unsigned char const *,unsigned char const *,unsigned __int64,void *)" (?friend_request_cb@@
YAXPEAUTox@@PEBE1_KPEAX@Z). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_friend_send_message в функции "void __cdecl frie
nd_message_cb(struct Tox *,unsigned int,enum TOX_MESSAGE_TYPE,unsigned char const *,unsigned __int64,void *)" (?friend_
message_cb@@YAXPEAUTox@@IW4TOX_MESSAGE_TYPE@@PEBE_KPEAX@Z). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_callback_friend_request в функции "void __cdecl
start(void)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  main.obj : error LNK2019: ссылка на неразрешенный внешний символ tox_callback_friend_message в функции "void __cdecl
start(void)" (?start@@YAXXZ). [F:\code\C++\untitled2\build\untitled2.vcxproj]
  F:\code\C++\untitled2\build\Debug\untitled2.exe : fatal error LNK1120: неразрешенных внешних элементов: 15 [F:\code\C
++\untitled2\build\untitled2.vcxproj]


мой код
#include <iostream>
#include <sodium/utils.h>
#include <tox/tox.h>

using namespace std;

typedef struct DHT_node {
    const char* ip;
    uint16_t port;
    const char key_hex[TOX_PUBLIC_KEY_SIZE * 2 + 1];
} DHT_node;

void friend_request_cb( Tox* tox, const uint8_t* public_key, const uint8_t* message, size_t length,
                        void* user_data );
void friend_message_cb( Tox* tox, uint32_t friend_number, TOX_MESSAGE_TYPE type, const uint8_t* message,
                        size_t length, void* user_data );
void self_connection_status_cb( Tox* tox, TOX_CONNECTION connection_status, void* user_data );
void start();


int main()
{
    start();
    return 0;
}

void friend_request_cb( Tox* tox, const uint8_t* public_key, const uint8_t* message, size_t length,
                        void* user_data )
{
    tox_friend_add_norequest( tox, public_key, NULL );
}

void friend_message_cb( Tox* tox, uint32_t friend_number, TOX_MESSAGE_TYPE type, const uint8_t* message,
                        size_t length, void* user_data )
{
    tox_friend_send_message( tox, friend_number, type, message, length, NULL );
}

void self_connection_status_cb( Tox* tox, TOX_CONNECTION connection_status, void* user_data )
{
    switch ( connection_status ) {
        case TOX_CONNECTION_NONE:
            printf( "Offline\n" );
            break;

        case TOX_CONNECTION_TCP:
            printf( "Online, using TCP\n" );
            break;

        case TOX_CONNECTION_UDP:
            printf( "Online, using UDP\n" );
            break;
    }
}

void start()
{
    Tox* tox = tox_new( NULL, NULL );

    tox_self_set_name( tox, NULL, NULL, NULL );

    tox_self_set_status_message( tox, NULL, NULL, NULL );

    DHT_node nodes[] = {
        {"85.143.221.42",                      33445, "DA4E4ED4B697F2E9B000EEFE3A34B554ACD3F45F5C96EAEA2516DD7FF9AF7B43"},
        {"2a04:ac00:1:9f00:5054:ff:fe01:becd", 33445, "DA4E4ED4B697F2E9B000EEFE3A34B554ACD3F45F5C96EAEA2516DD7FF9AF7B43"},
        {"78.46.73.141",                       33445, "02807CF4F8BB8FB390CC3794BDF1E8449E9A8392C5D3F2200019DA9F1E812E46"},
        {"2a01:4f8:120:4091::3",               33445, "02807CF4F8BB8FB390CC3794BDF1E8449E9A8392C5D3F2200019DA9F1E812E46"},
        {"tox.initramfs.io",                   33445, "3F0A45A268367C1BEA652F258C85F4A66DA76BCAA667A49E770BCC4917AB6A25"},
        {"tox2.abilinski.com",                 33445, "7A6098B590BDC73F9723FC59F82B3F9085A64D1B213AAF8E610FD351930D052D"},
        {"205.185.115.131",                       53, "3091C6BEB2A993F1C6300C16549FABA67098FF3D62C6D253828B531470B53D68"},
        {"tox.kurnevsky.net",                  33445, "82EF82BA33445A1F91A7DB27189ECFC0C013E06E3DA71F588ED692BED625EC23"}
    };

    for ( size_t i = 0; i < sizeof( nodes ) / sizeof( DHT_node ); i ++ ) {
        unsigned char key_bin[TOX_PUBLIC_KEY_SIZE];
        sodium_hex2bin( key_bin, sizeof( key_bin ), nodes[i].key_hex, sizeof( nodes[i].key_hex ) - 1,
                        NULL, NULL, NULL );
        tox_bootstrap( tox, nodes[i].ip, nodes[i].port, key_bin, NULL );
    }

    uint8_t tox_id_bin[TOX_ADDRESS_SIZE];
    tox_self_get_address( tox, tox_id_bin );

    char tox_id_hex[TOX_ADDRESS_SIZE * 2 + 1];
    sodium_bin2hex( tox_id_hex, sizeof( tox_id_hex ), tox_id_bin, sizeof( tox_id_bin ) );

    for ( size_t i = 0; i < sizeof( tox_id_hex ) - 1; i ++ ) {
        tox_id_hex[i] = toupper( tox_id_hex[i] );
    }

    printf( "Tox ID: %s\n", tox_id_hex );

    tox_callback_friend_request( tox, friend_request_cb );
    tox_callback_friend_message( tox, friend_message_cb );

    tox_callback_self_connection_status( tox, self_connection_status_cb );

    printf( "Connecting...\n" );

    while ( 1 ) {
        tox_iterate( tox, NULL );

        _sleep( tox_iteration_interval( tox ) * 1000 );
    }

    tox_kill( tox );

}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(untitled2 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_library(LIBTOXCORE NAMES toxcore PATHS
	"${CMAKE_SOURCE_DIR}/dependencies/toxcore/lib"
	NO_SYSTEM_ENVIRONMENT_PATH
	)
find_library(LIBSODIUM NAMES libsodium PATHS
	"${CMAKE_SOURCE_DIR}/dependencies/libsodium/x64/Release/v141/static"
	NO_SYSTEM_ENVIRONMENT_PATH
	)

include_directories(${CMAKE_SOURCE_DIR}/dependencies/libsodium/include)
include_directories(${CMAKE_SOURCE_DIR}/dependencies/toxcore/include)

add_executable(untitled2 main.cpp)
target_link_libraries(untitled2 ${LIBTOXCORE} ${LIBSODIUM})

  • Вопрос задан
  • 90 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы