Ошибка связывания для клиента rabbitmq-c

Я хочу реализовать небольшой клиент C ++, который подключается к моему локальному RabbitMQ-серверу.

Приложение настроено с CMakeList следующим образом:

Boost_STATIC_LIBS: ON
Boost SHARED_LIBS: ON
ENABLE_SSL_SUPPORT: ON
Rabbitmqc_INCLUDE_DIR: C:/rabbitmq-c/include
Rabbitmqc_LIBRARY: C:/rabbitmq-c/lib
Rabbitmqc_SSL_ENABLED: ON
_Rabbitmqc_SSL_HEADER: C:/rabbitmq-c/include/amqp_ssl_socket.h

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(client)

INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/utilities
)

# Find Boost library
SET(Boost_INCLUDE_DIR C:/local/boost_1_64_0)
SET(Boost_LIBRARY_DIR C:/local/boost_1_64_0/lib64-msvc-14.0)
FIND_PACKAGE(Boost 1.64.0 COMPONENTS chrono system REQUIRED)
INCLUDE_DIRECTORIES(SYSTEM ${Boost_INCLUDE_DIRS})

# Find Rabbitmqc library
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules)
FIND_PACKAGE(Rabbitmqc REQUIRED)
INCLUDE_DIRECTORIES(SYSTEM ${Rabbitmqc_INCLUDE_DIRS})

OPTION(ENABLE_SSL_SUPPORT "Enable SSL support." ${Rabbitmqc_SSL_ENABLED})
OPTION(BUILD_SHARED_LIBS "Build client as a shared library" ON)
OPTION(BOOST_STATIC_LIBS "Build Boost as a static library" ON)

IF(WIN32)
SET(PLATFORM_DIR win32)
ELSE(WIN32)
SET(PLATFORM_DIR unix)
ENDIF(WIN32)

set(COMMON_SRCS
utilities/utils.h
utilities/utils.c
${PLATFORM_DIR}/utilities/platform_utils.c
)

SET(client_SRCS
testClient.cxx
)
ADD_EXECUTABLE(client ${client_SRCS})
TARGET_LINK_LIBRARIES(client ${Boost_LIBRARIES} ${Rabbitmqc_LIBRARY} ${OPENSSL_LIBRARIES} ${SOCKET_LIBRARY})

Выход CMake-Gui после генерации:

Boost version: 1.64.0
Found the following Boost libraries:
chrono
system
Found Rabbitmqc
Configuring done
WARNING: Target "client" requests linking to directory "C:/rabbitmq-c/lib".  Targets may link only to libraries.  CMake is dropping the item.
Generating done

Я не понимаю, почему библиотека Rabbitmqc не связана должным образом. это запись ${Rabbitmqc_LIBRARY} в TARGET_LINK_LIBRARIES недостаточно?

Если я компилирую свой клиент, то получаю следующие ошибки:

testClient.cxx

#include <iostream>
#include <amqp.h>
#include <amqp_tcp_socket.h>

#include <assert.h>

#include "utilities\utils.h"
int main(int argc, char const *const *argv)
{
char const *hostname;
int port, status;
char const *exchange;
char const *bindingkey;
amqp_socket_t *socket = NULL;
amqp_connection_state_t conn;
amqp_bytes_t queuename;

if (argc < 5)
{
fprintf(stderr, "Usage: amqp_listen host port exchange bindingkey\n");
return 1;
}

hostname = "localhost";
port = atoi("15672");
exchange = "testExchange";
bindingkey = "testMessage";

conn = amqp_new_connection();

socket = amqp_tcp_socket_new(conn);
if(!socket)
{
std::cout<<"Error creating SSL/TLS socket"<<std::endl;
}

status = amqp_socket_open(socket, hostname, port);
if(status)
{
std::cout<<"opening TCP socket"<<std::endl;
}
}LINK : warning LNK4044: unrecognized option '/lrabbitmq'; ignored
2>testClient.obj : error LNK2019: unresolved external symbol _amqp_new_connection referenced in function _main
2>testClient.obj : error LNK2019: unresolved external symbol _amqp_socket_open referenced in function _main
2>testClient.obj : error LNK2019: unresolved external symbol _amqp_tcp_socket_new referenced in function _main
2>C:\local\boost_1_64_0\lib64-msvc-14.0\boost_chrono-vc140-mt-1_64.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
2>C:\local\boost_1_64_0\lib64-msvc-14.0\boost_system-vc140-mt-1_64.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'

Спасибо за любое предложение!

OS: Win10 64x
Boost: boost_1_64_0 (in path)
rabbitmq-c (in path)
RabbitMQ Server: rabbitmq_server-3.7.6 (in path)
CMake: 3.9.6
OpenSSL: Win32OpenSSL-1_1_0h
IDE: Visual Studio 14(2015)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]