Giter VIP home page Giter VIP logo

viabtc_exchange_server's Introduction

ViaBTC Exchange Server

ViaBTC Exchange Server is a trading backend with high-speed performance, designed for cryptocurrency exchanges. It can support up to 10000 trades every second and real-time user/market data notification through websocket.

Architecture

Architecture

For this project, it is marked as Server in this picture.

Code structure

Required systems

  • MySQL: For saving operation log, user balance history, order history and trade history.

  • Redis: A redis sentinel group is for saving market data.

  • Kafka: A message system.

Base library

  • network: An event base and high performance network programming library, easily supporting 1000K TCP connections. Include TCP/UDP/UNIX SOCKET server and client implementation, a simple timer, state machine, thread pool.

  • utils: Some basic library, including log, config parse, some data structure and http/websocket/rpc server implementation.

Modules

  • matchengine: This is the most important part for it records user balance and executes user order. It is in memory database, saves operation log in MySQL and redoes the operation log when start. It also writes user history into MySQL, push balance, orders and deals message to kafka.

  • marketprice: Reads message(s) from kafka, and generates k line data.

  • readhistory: Reads history data from MySQL.

  • accesshttp: Supports a simple HTTP interface and hides complexity for upper layer.

  • accwssws: A websocket server that supports query and pushes for user and market data. By the way, you need nginx in front to support wss.

  • alertcenter: A simple server that writes FATAL level log to redis list so we can send alert emails.

Compile and Install

Operating system

Ubuntu 14.04 or Ubuntu 16.04. Not yet tested on other systems.

Requirements

See requirements. Install the mentioned system or library.

You MUST use the depends/hiredis to install the hiredis library. Or it may not be compatible.

Compilation

Compile network and utils first. The rest all are independent.

Deployment

One single instance is given for matchengine, marketprice and alertcenter, while readhistory, accesshttp and accwssws can have multiple instances to work with loadbalancing.

Please do not install every instance on the same machine.

Every process runs in deamon and starts with a watchdog process. It will automatically restart within 1s when crashed.

The best practice of deploying the instance is in the following directory structure:

matchengine
|---bin
|   |---matchengine.exe
|---log
|   |---matchengine.log
|---conf
|   |---config.json
|---shell
|   |---restart.sh
|   |---check_alive.sh

API

HTTP Protocol and Websocket Protocol documents are available in Chinese. Should time permit, we will have it translated into English in the future.

There is also a third-party OpenRPC Document available.

Third-party Clients

Websocket authorization

The websocket protocol has an authorization method (server.auth) which is used to authorize the websocket connection to subscribe to user specific events (trade and balance events).

To accommodate this method your exchange frontend will need to supply an internal endpoint which takes an authorization token from the HTTP header named Authorization and validates that token and returns the user_id.

The internal authorization endpoint is defined by the auth_url setting in the config file (accessws/config.json).

Example response: {"code": 0, "message": null, "data": {"user_id": 1}}

viabtc_exchange_server's People

Contributors

benjaminchodroff avatar ceyonur avatar chenluyong avatar djpnewton avatar edwiincao avatar en avatar haipome avatar ilanoh avatar jason-cooke avatar krmbzds avatar lealife avatar objectt avatar ohld avatar pplorins avatar sheepy0905 avatar sjinks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

viabtc_exchange_server's Issues

Example of connecting to accessws

Hey guys, does any has the example of connecting to accessws? Having trouble in finding the origin of problem. Wireshark shows that connecting is stalling on waiting of first handshake message from accessws. @haipome

marketprice.exe

Hello.
Very good software!
All services are is up. Only one have error when start:
marketprice.exe: init message fail: -356: Operation now in progress

Could you help - what I do wrong ?

operlog not exist

Hi, I get this error when I run matchengine.

table operlog_20180125 not exist
table operlog_20180126 not exist

image

I get this error while compiling ,can anybody help me out of this

gcc -g -rdynamic -o marketprice.exe mp_message.o mp_config.o mp_main.o mp_kline.o mp_server.o -L ../utils -lutils -L ../network -lnetwork -Wl,-Bstatic -lev -ljansson -lmpdec -lrdkafka -lz -lssl -lcrypto -lhiredis -lcurl -Wl,-Bdynamic -lm -lpthread -ldl
//usr/local/lib/libcurl.a(libcurl_la-md5.o): In function Curl_md5it': md5.c:(.text+0x22): undefined reference to MD5_Init'
md5.c:(.text+0x3f): undefined reference to MD5_Update' md5.c:(.text+0x4a): undefined reference to MD5_Final'
//usr/local/lib/libcurl.a(libcurl_la-md5.o):(.data.rel.ro+0x0): undefined reference to MD5_Init' //usr/local/lib/libcurl.a(libcurl_la-md5.o):(.data.rel.ro+0x8): undefined reference to MD5_Update'
//usr/local/lib/libcurl.a(libcurl_la-md5.o):(.data.rel.ro+0x10): undefined reference to MD5_Final' //usr/local/lib/libcurl.a(libcurl_la-md5.o):(.data.rel.ro+0x20): undefined reference to MD5_Init'
//usr/local/lib/libcurl.a(libcurl_la-md5.o):(.data.rel.ro+0x28): undefined reference to MD5_Update' //usr/local/lib/libcurl.a(libcurl_la-md5.o):(.data.rel.ro+0x30): undefined reference to MD5_Final'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_sha256sum': openssl.c:(.text+0x11a): undefined reference to SHA256_Init'
openssl.c:(.text+0x128): undefined reference to SHA256_Update' openssl.c:(.text+0x133): undefined reference to SHA256_Final'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_md5sum': openssl.c:(.text+0x187): undefined reference to MD5_Init'
openssl.c:(.text+0x195): undefined reference to MD5_Update' openssl.c:(.text+0x1a0): undefined reference to MD5_Final'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_engines_list': openssl.c:(.text+0x1d5): undefined reference to ENGINE_get_first'
openssl.c:(.text+0x1f7): undefined reference to ENGINE_get_next' openssl.c:(.text+0x207): undefined reference to ENGINE_get_id'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_set_engine': openssl.c:(.text+0x268): undefined reference to ENGINE_by_id'
openssl.c:(.text+0x285): undefined reference to ENGINE_finish' openssl.c:(.text+0x291): undefined reference to ENGINE_free'
openssl.c:(.text+0x2a4): undefined reference to ENGINE_init' openssl.c:(.text+0x2dc): undefined reference to ENGINE_free'
openssl.c:(.text+0x2e1): undefined reference to ERR_get_error' openssl.c:(.text+0x2f1): undefined reference to ERR_error_string_n'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_close_all': openssl.c:(.text+0x364): undefined reference to ENGINE_finish'
openssl.c:(.text+0x370): undefined reference to ENGINE_free' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function ossl_recv':
openssl.c:(.text+0x3d3): undefined reference to ERR_clear_error' openssl.c:(.text+0x400): undefined reference to SSL_read'
openssl.c:(.text+0x44f): undefined reference to SSL_get_error' openssl.c:(.text+0x468): undefined reference to ERR_get_error'
openssl.c:(.text+0x4f0): undefined reference to ERR_error_string_n' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function ssl_ui_writer':
openssl.c:(.text+0x880): undefined reference to UI_get_string_type' openssl.c:(.text+0x890): undefined reference to UI_get0_user_data'
openssl.c:(.text+0x89d): undefined reference to UI_get_input_flags' openssl.c:(.text+0x8a6): undefined reference to UI_OpenSSL'
openssl.c:(.text+0x8ae): undefined reference to UI_method_get_writer' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function ssl_ui_reader':
openssl.c:(.text+0x8de): undefined reference to UI_get_string_type' openssl.c:(.text+0x8ee): undefined reference to UI_get0_user_data'
openssl.c:(.text+0x8fe): undefined reference to UI_get_input_flags' openssl.c:(.text+0x907): undefined reference to UI_OpenSSL'
openssl.c:(.text+0x90f): undefined reference to UI_method_get_reader' openssl.c:(.text+0x92a): undefined reference to UI_set_result'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function pubkey_show': openssl.c:(.text+0x98d): undefined reference to BN_print'
openssl.c:(.text+0x9a1): undefined reference to BIO_ctrl' openssl.c:(.text+0x9c8): undefined reference to BIO_ctrl'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_data_pending': openssl.c:(.text+0xa12): undefined reference to SSL_pending'
openssl.c:(.text+0xa37): undefined reference to SSL_pending' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_shutdown':
openssl.c:(.text+0xac8): undefined reference to ERR_clear_error' openssl.c:(.text+0xae5): undefined reference to SSL_read'
openssl.c:(.text+0xaf7): undefined reference to SSL_get_error' openssl.c:(.text+0xb1f): undefined reference to ERR_get_error'
openssl.c:(.text+0xb84): undefined reference to SSL_free' openssl.c:(.text+0xbed): undefined reference to SSL_get_shutdown'
openssl.c:(.text+0xcbc): undefined reference to ERR_error_string_n' openssl.c:(.text+0xcf9): undefined reference to SSL_shutdown'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_version': openssl.c:(.text+0xe07): undefined reference to SSLeay'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function ossl_send': openssl.c:(.text+0xf21): undefined reference to ERR_clear_error'
openssl.c:(.text+0xf4e): undefined reference to SSL_write' openssl.c:(.text+0xf9e): undefined reference to SSL_get_error'
openssl.c:(.text+0xfbc): undefined reference to ERR_get_error' openssl.c:(.text+0xfe9): undefined reference to ERR_error_string_n'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_cleanup': openssl.c:(.text+0x10f5): undefined reference to EVP_cleanup'
openssl.c:(.text+0x10fa): undefined reference to ENGINE_cleanup' openssl.c:(.text+0x10ff): undefined reference to ERR_free_strings'
openssl.c:(.text+0x1106): undefined reference to ERR_remove_thread_state' openssl.c:(.text+0x110b): undefined reference to CONF_modules_free'
openssl.c:(.text+0x1110): undefined reference to SSL_COMP_free_compression_methods' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_set_engine_default':
openssl.c:(.text+0x1160): undefined reference to ENGINE_set_default' openssl.c:(.text+0x1170): undefined reference to ENGINE_get_id'
openssl.c:(.text+0x1199): undefined reference to ENGINE_get_id' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function ossl_close.isra.2':
openssl.c:(.text+0x11d1): undefined reference to `SSL_shutdown'

Can someone help me with compiling. I've install all requirements

/root/librdkafka/src/rdkafka_lz4.c:373: undefined reference to LZ4F_isError' /root/librdkafka/src/rdkafka_lz4.c:386: undefined reference to LZ4F_compressUpdate'
/root/librdkafka/src/rdkafka_lz4.c:388: undefined reference to LZ4F_isError' /root/librdkafka/src/rdkafka_lz4.c:389: undefined reference to LZ4F_getErrorName'
/root/librdkafka/src/rdkafka_lz4.c:348: undefined reference to LZ4F_getErrorName' /root/librdkafka/src/rdkafka_lz4.c:429: undefined reference to LZ4F_freeCompressionContext'
/root/librdkafka/src/rdkafka_lz4.c:405: undefined reference to LZ4F_compressEnd' /root/librdkafka/src/rdkafka_lz4.c:406: undefined reference to LZ4F_isError'
/root/librdkafka/src/rdkafka_lz4.c:429: undefined reference to LZ4F_freeCompressionContext' /root/librdkafka/src/rdkafka_lz4.c:374: undefined reference to LZ4F_getErrorName'
/root/librdkafka/src/rdkafka_lz4.c:407: undefined reference to LZ4F_getErrorName' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_version':
openssl.c:(.text+0xe07): undefined reference to SSLeay' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_set_engine_default':
openssl.c:(.text+0x1160): undefined reference to ENGINE_set_default' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_seed.part.4':
openssl.c:(.text+0x1379): undefined reference to RAND_file_name' openssl.c:(.text+0x138f): undefined reference to RAND_load_file'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_seed': openssl.c:(.text+0x1438): undefined reference to RAND_load_file'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_step1': openssl.c:(.text+0x2307): undefined reference to BIO_f_ssl'
//usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_init': openssl.c:(.text+0x33d7): undefined reference to OPENSSL_load_builtin_modules'
openssl.c:(.text+0x33dc): undefined reference to ENGINE_load_builtin_engines' //usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function servercert':
openssl.c:(.text+0x44ad): undefined reference to OCSP_response_status' openssl.c:(.text+0x44c0): undefined reference to OCSP_response_status_str'
openssl.c:(.text+0x4ab4): undefined reference to OCSP_response_get1_basic' openssl.c:(.text+0x4aec): undefined reference to OCSP_basic_verify'
openssl.c:(.text+0x4b38): undefined reference to OCSP_resp_count' openssl.c:(.text+0x4b4e): undefined reference to OCSP_resp_get0'
openssl.c:(.text+0x4b73): undefined reference to OCSP_single_get0_status' openssl.c:(.text+0x4b97): undefined reference to OCSP_check_validity'
openssl.c:(.text+0x4ba7): undefined reference to OCSP_cert_status_str' openssl.c:(.text+0x4f41): undefined reference to OCSP_crl_reason_str'

关于订单权限问题.

@haipome 你好.
正在学习您的项目,现在刚刚部署完成,
产生了新的疑问.
项目里貌似没有用户管理这一块的服务.
通过accesshttp能直接对户资产进行更改.
是否是说accesshttp不能直接对外进行服务,
所有接口只对内网的用户类webserver连接开放?
想请教下设计思路,谢谢.

Different results from market.status_today and market.status (period=86400), expected?

Hello @haipome! Could you please elaborate should the responses from market.status_today and market.status with period=86400 return different results?

(*core.MarketStatusTodayResponse)({
 Open: "0.18158999",  <--- different
 High: "0.19",
 Low: "0.12",  <--- different
 Amount: "355834.6932008347845013",
 Volume: "2203265.3882346"
 Last: "0.16988683",
})
(*core.MarketStatusResponse)({
 Open: "0.17310776", <--- different
 Close: "0.16988683",
 High: "0.19", 
 Low: "0.1111",  <--- different
 Volume: "2203265.3882346"
 Last: "0.16988683",
 Period: 86400,
})

database schema?

Is it possible to get some information about how the database is designed?

For instance it looks like each user in the system gets a set of their own tables (order_history_%u, order_detail_%u, deal_history_%u, user_deal_history_%u, balance_history_%u). Is there a reason for that?

no "total" field for order.completed RPC

The order.pending RPC returns a "total" field (indicating the total number of records that one could request using the offset and limit fields) but order.completed does not have this field (same with balance.history)

Looking at the code I guess we could do a "SELECT count()" type query as well (in rh_reader.c get_user_order_finished()).. but I guess it could add a bit more load to the server

What's the source code licence terms?

Hi,

there's no license terms in your whole source code.
example, what I'm saying is MIT or Apache or GPL or LGPL or ...
Or, Your company internal license term.

It may be freely studying use now.
Source code has opened but, Licenses are still live.
So you can describe exact source code license terms in your souce code.

Good study materials.
thanks.

Is serialization questions. when using thread pool.

example in ut_dict.c ,
there's widely referenced dictionary hash table generation functions.
in mp_server.c , trade , me_main.c , they uses threadpool ,
but, I can't find dict function / balance categorie (mpdecimal use) , and several global variable doesn't protected on MT-safe condition.

where can I find serialzation code? it is exists in just thread pool add/remove functions only.

include header file modification for mixing with C++ sourcecode.

in most case,
C programmers write their source code with following ways::

----------- viabtc_exchange_server/matchengine/me_cli.h -------------------

# ifndef _ME_CLI_H_
# define _ME_CLI_H_

int init_cli(void);

# endif

To modified for mixing C/C++ source code.

---------- sample of modify the code -----------------------------------------

# ifndef _ME_CLI_H_
# define _ME_CLI_H_

#ifdef __cplusplus
extern "C" {
#endif

int init_cli(void);

#ifdef __cplusplus
}
#endif

# endif

** sample link ::

限价单逻辑是否反了?

在execute_limit_ask_order里,判断

if (mpd_cmp(taker->price, maker->price, &mpd_ctx) > 0) {
break;
}

这样的话,挂买单,撮合的都是卖价大于等于买价的,买贵了。
在execute_limit_bid_order里则是

if (mpd_cmp(taker->price, maker->price, &mpd_ctx) < 0) {
break;
}
这个,挂卖单,撮合的也是买价小于等于卖价的,卖便宜了。

Some questions about the project

Hello, haipo!

I have some questions about your project https://github.com/viabtc/viabtc_exchange_server

I will be happy if you answer these questions:

  1. Firstly, I didn't see the ViaBTC when it was working and I don't know how much people use it. My question is: why do you use MySQL?
    Maybe, a preferred database will be MongoDB or another NoSQL database? I know about the persistence, so we can enable it in MongoDB.

  2. Which was the load on the system when the ViaBTC was working?

  3. Why did you use the C? Is it your the main programming language?

Thanks!

Kafka - Name or service not known

I'm running Kafka but I get ‘Name or service not known’ error, price and matchengine gives the same error.
Kafka Server
Command
kafkacat -C -b mybroker -t syslog -p 0 -o -2000 -e
Result

%3|1515056843.985|FAIL|rdkafka#consumer-0| mybroker:9092/bootstrap: Failed to resolve 'mybroker:9092': Name or service not known
%3|1515056843.985|ERROR|rdkafka#consumer-0| mybroker:9092/bootstrap: Failed to resolve 'mybroker:9092': Name or service not known
%3|1515056843.986|ERROR|rdkafka#consumer-0| 1/1 brokers are down

marketprice.exe: init message fail

marketprice.exe: init message fail: -309: Operation now in progress
Anyone know this messages reason?

I set up three sentinel, it doesn't work!

$ ps -ef|grep redis
redis 6213 1 0 00:36 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6381
redis 6223 1 0 00:36 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6382
redis 6231 1 0 00:36 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6383
redis 6244 1 0 00:36 ? 00:00:00 /usr/bin/redis-sentinel *:26381
redis 6254 1 0 00:36 ? 00:00:00 /usr/bin/redis-sentinel *:26382
redis 6264 1 0 00:36 ? 00:00:00 /usr/bin/redis-sentinel *:26383
deploy 6274 3049 0 00:37 pts/8 00:00:00 grep --color=auto redis

$ redis-cli -p 6381 info | grep role
role:master
$ redis-cli -p 6382 info | grep role
role:slave
$ redis-cli -p 6383 info | grep role
role:slave

$ redis-cli -p 26381 -h 127.0.0.1 INFO Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=127.0.0.1:6381,slaves=2,sentinels=3

order.put_market, amount, inconsistency

Hey @haipome ! We have noticed inconsistency in what we have to specify in the field amount for order.put_limit and order_put_market, and I am wondering is that was done intentionally or not.

In the command order.put_limit amount corresponds to the number of stocks user wants to buy/sell.

In the command order.put_market when we use bid side amount corresponds to number of money user wants to spend on buying the stock, and when we use ask side amount corresponds to the stock user want to sell. Wouldn't it be better to make it consistent or probably I am missing something? Thanks!

Command Side Meaning of amount
order.put_limit ask stock
order.put_limit bid stock
order.put_market ask stock
order.put_market bid money

what is a "slice"?

I am trying to understand some of the terms in db.
There are a lot of tables "slice_balance_%timestamp%", "slice_order_%timestamp%" created over time. Are they meant to be deleted after a while?

Some error when compile the "accessws" and "marketprice" package.(libcurl)

I try to compile the "accessws" and "marketprice" package using make command . but it seems something is wrong in libcurl.
Anyone can help me solve this problem? Thank you very much.

The error messages are as follows:

g++ -g -rdynamic -o marketprice.exe mp_message.o mp_config.o mp_main.o mp_server.o mp_kline.o -L ../utils -lutils -L ../network -lnetwork -Wl,-Bstatic -lev -ljansson -lmpdec -lrdkafka -lz -lssl -lcrypto -lhiredis -lcurl -Wl,-Bdynamic -lm -lpthread -ldl
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-strerror.o): In function Curl_idn_strerror': (.text+0x773): undefined reference to idna_strerror'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function Curl_disconnect': (.text+0x5f92): undefined reference to idn_free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function Curl_disconnect': (.text+0x5fae): undefined reference to idn_free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function Curl_connect': (.text+0x94cf): undefined reference to idn_free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function Curl_connect': (.text+0x9602): undefined reference to idn_free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function fix_hostname': (.text.unlikely+0x162): undefined reference to stringprep_check_version'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function fix_hostname': (.text.unlikely+0x181): undefined reference to idna_to_ascii_lz'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function fix_hostname': (.text.unlikely+0x189): undefined reference to stringprep_locale_charset'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function fix_hostname': (.text.unlikely+0x1e3): undefined reference to idna_to_unicode_lzlz'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function fix_hostname': (.text.unlikely+0x1f8): undefined reference to tld_check_lz'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function fix_hostname': (.text.unlikely+0x206): undefined reference to tld_strerror'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-url.o): In function fix_hostname': (.text.unlikely+0x241): undefined reference to idn_free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function cleanup': (.text+0x2b): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function cleanup': (.text+0x40): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function cleanup': (.text+0x55): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function Curl_output_negotiate': (.text+0x125): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function Curl_output_negotiate': (.text+0x1ba): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function Curl_input_negotiate': (.text+0x382): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function Curl_input_negotiate': (.text+0x429): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function Curl_input_negotiate': (.text+0x479): undefined reference to GSS_C_NT_HOSTBASED_SERVICE'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-http_negotiate.o): In function Curl_input_negotiate': (.text+0x48e): undefined reference to gss_import_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function check_gss_err.part.0': (.text+0x57): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function check_gss_err.part.0': (.text+0x7b): undefined reference to gss_display_status'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function check_gss_err.part.0': (.text+0xa4): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function check_gss_err.part.0': (.text+0xd7): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function check_gss_err.part.0': (.text+0xf7): undefined reference to gss_display_status'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function check_gss_err.part.0': (.text+0x11a): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function check_gss_err.part.0': (.text+0x1a6): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x32c): undefined reference to gss_import_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x33f): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x3ed): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x416): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x421): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x4f0): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x4fd): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x513): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x53d): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x54e): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x630): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x63d): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x682): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x68f): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x69b): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x6ac): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x70d): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x7cf): undefined reference to GSS_C_NT_HOSTBASED_SERVICE'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x7d7): undefined reference to gss_import_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x807): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x843): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x869): undefined reference to gss_inquire_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x890): undefined reference to gss_display_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x8ea): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0x8f6): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xa1c): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xa68): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xa73): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xabc): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xac7): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xad3): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xae6): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xaf6): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xb02): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xb58): undefined reference to gss_wrap'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xb71): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xc5a): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xc6a): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xc7b): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xca1): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xce9): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xe0d): undefined reference to gss_unwrap'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xe29): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xe73): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xed4): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xef6): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xf21): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xf31): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-socks_gssapi.o): In function Curl_SOCKS5_gssapi_negotiate': (.text+0xf42): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_disconnect': (.text+0x2c): undefined reference to RTMP_Close'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_disconnect': (.text+0x34): undefined reference to RTMP_Free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_connect': (.text+0xd4): undefined reference to RTMP_Connect1'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_send': (.text+0x162): undefined reference to RTMP_Write'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_recv': (.text+0x1ab): undefined reference to RTMP_Read'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_setup_connection': (.text+0x21a): undefined reference to RTMP_Alloc'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_setup_connection': (.text+0x22f): undefined reference to RTMP_Init'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_setup_connection': (.text+0x23c): undefined reference to RTMP_SetBufferMS'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_setup_connection': (.text+0x24f): undefined reference to RTMP_SetupURL'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_setup_connection': (.text+0x274): undefined reference to RTMP_Free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_rtmp.o): In function rtmp_do': (.text+0x2a6): undefined reference to RTMP_ConnectStream'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_disconnect': (.text+0x53): undefined reference to ldap_unbind_ext'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x10e): undefined reference to ldap_result'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x13c): undefined reference to ldap_parse_result'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x168): undefined reference to ldap_get_option'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x182): undefined reference to ldap_memfree'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x1a3): undefined reference to ldap_set_option'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x1f4): undefined reference to ldap_sasl_bind'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x223): undefined reference to ldap_memfree'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x276): undefined reference to ldap_err2string'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x2a5): undefined reference to ldap_memfree'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x2e9): undefined reference to ldap_get_option'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x302): undefined reference to ber_sockbuf_add_io'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x353): undefined reference to ldap_err2string'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connecting': (.text+0x37b): undefined reference to ldap_err2string'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x42a): undefined reference to ldap_result'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x452): undefined reference to ldap_first_message'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x497): undefined reference to ldap_next_message'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x4ab): undefined reference to ldap_msgtype'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x4d7): undefined reference to ldap_get_dn_ber'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x573): undefined reference to ldap_get_attribute_ber'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x74f): undefined reference to ber_memfree'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x796): undefined reference to ldap_get_attribute_ber'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x7e7): undefined reference to ber_free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x8fd): undefined reference to ldap_msgfree'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x931): undefined reference to ldap_parse_result'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x97e): undefined reference to ldap_memfree'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x99a): undefined reference to ber_memfree'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x9a6): undefined reference to ber_free'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x9b0): undefined reference to ldap_msgfree'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0x9dc): undefined reference to ldap_err2string'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0xa10): undefined reference to ldap_err2string'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_recv': (.text+0xa50): undefined reference to ldap_err2string'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_done': (.text+0xaff): undefined reference to ldap_abandon_ext'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_do': (.text+0xb6d): undefined reference to ldap_url_parse'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_do': (.text+0xc0e): undefined reference to ldap_search_ext'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_do': (.text+0xc1f): undefined reference to ldap_free_urldesc'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_do': (.text+0xc2c): undefined reference to ldap_err2string'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_setup_connection': (.text+0xce7): undefined reference to ldap_url_parse'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_setup_connection': (.text+0xd59): undefined reference to ldap_pvt_url_scheme2proto'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_setup_connection': (.text+0xd64): undefined reference to ldap_free_urldesc'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connect': (.text+0xefc): undefined reference to ldap_init_fd'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connect': (.text+0xf07): undefined reference to ldap_err2string'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openldap.o): In function ldap_connect': (.text+0xf5f): undefined reference to ldap_set_option'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_gssapi.o): In function Curl_gss_init_sec_context': (.text+0x52): undefined reference to gss_init_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_gssapi.o): In function Curl_gss_log_error': (.text+0x10f): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_gssapi.o): In function Curl_gss_log_error': (.text+0x138): undefined reference to gss_display_status'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_user_message': (.text+0x19e): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_user_message': (.text+0x1f8): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_user_message': (.text+0x24b): undefined reference to GSS_C_NT_HOSTBASED_SERVICE'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_user_message': (.text+0x25f): undefined reference to gss_import_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x3cb): undefined reference to gss_inquire_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x41e): undefined reference to gss_display_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x479): undefined reference to gss_unwrap'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x4a9): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x4fe): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x588): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x5bf): undefined reference to gss_wrap'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x60f): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x626): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_create_gssapi_security_message': (.text+0x65f): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_gssapi_cleanup': (.text+0x6a9): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-curl_sasl_gssapi.o): In function Curl_sasl_gssapi_cleanup': (.text+0x6c5): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_seed': (.text+0x645): undefined reference to RAND_load_file'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_seed': (.text+0x6bb): undefined reference to RAND_file_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_seed': (.text+0x6d1): undefined reference to RAND_load_file'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x2bce): undefined reference to OCSP_response_status'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x2be1): undefined reference to OCSP_response_status_str'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x3033): undefined reference to OCSP_response_get1_basic'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x306e): undefined reference to OCSP_basic_verify'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x30b7): undefined reference to OCSP_resp_count'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x30cd): undefined reference to OCSP_resp_get0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x30f2): undefined reference to OCSP_single_get0_status'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x3113): undefined reference to OCSP_check_validity'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x3123): undefined reference to OCSP_cert_status_str'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function ossl_connect_common': (.text+0x3781): undefined reference to OCSP_crl_reason_str'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_init': (.text+0x3a15): undefined reference to OPENSSL_load_builtin_modules'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_init': (.text+0x3a1a): undefined reference to ENGINE_load_builtin_engines'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_set_engine_default': (.text+0x3c00): undefined reference to ENGINE_set_default'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-openssl.o): In function Curl_ossl_version': (.text+0x40d7): undefined reference to SSLeay'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_encode': (.text+0x83): undefined reference to gss_seal'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_encode': (.text+0xc8): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_end': (.text+0x125): undefined reference to gss_delete_sec_context'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x271): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x2dc): undefined reference to GSS_C_NT_HOSTBASED_SERVICE'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x2e7): undefined reference to gss_import_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x309): undefined reference to gss_display_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x335): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x3b2): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x3bd): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x4bc): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x52c): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x537): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x55f): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x5a1): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x5ac): undefined reference to gss_release_buffer'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x65d): undefined reference to GSS_C_NT_HOSTBASED_SERVICE'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x668): undefined reference to gss_import_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_auth': (.text+0x67d): undefined reference to gss_release_name'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_decode': (.text+0x79b): undefined reference to gss_unseal'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libcurl.a(libcurl_la-krb5.o): In function krb5_decode': (.text+0x7f6): undefined reference to gss_release_buffer'
collect2: error: ld returned 1 exit status
../makefile.inc:13: recipe for target 'marketprice.exe' failed
make: *** [marketprice.exe] Error 1

Recommend log , balance server from MySQL to NoSQL DB.

I think MySQL server using the store logs, user balances, important imformation.
It will used NoSQL based backend (eg. mongodb , ... ) for scalabilities and securities .
using the sharding and replication technology.
MySQL is Popular using R-DBMS and Also secure , but it's central and websites store passwd.
It's hard to expanding and backuping the data , in realtime.

Hi Haipo, is it possible to get installation service from you ?

Hi Haipo,

Glad to see you still maintain this viabtc_exchange_server script even your exchange business was closed due to government regulation

I am working to setup my exchange business and looking for industrial standard and well tested software for the exchange server and may use via BTC

Could you please advise if possible to me to get support from your side ?, we can do good exchange business

Lookign forward for your reply

Thank you

Regards,
Sardan

Newbie - compilation

I set up a Ubuntu 16.04 vm to learn this project myself. I am having trouble compiling the network module with included makefile.

Can someone post a more detailed guide on how to install / compile / use dependency libs then the server modules?
I was able to fetch some libs via apt-get, but many other libs (i.e. libev) seem to require recompilation from source with automake, which I don't have a clue.
Also, once I am able to compile the dependency lib, how do I make use of it to compile higher level modules such as "network"?

Much appreciated.

Update balance

Hello!
How to add coin daemons support to your exchange server?
Thx, max
;)

How do I insert asset data?

I got a great help from djpnewton.
However, I am in trouble to insert market data into exchange server.

I have 2 questions
one is that how to input asset data.
two is that if accessws server is the one to insert data, how do I use it? how do I install it?

Dependency configuration

Hi Haipo,

Could you please share the configuration and setup instructions for Zookeeper, Kafka, and Redis server+sentinel?

Thanks.

marketprice.exe error message

# ./marketprice.exe: init message fail: -309: Connection refused

Anyone know this messages reason?
I am not familiar with Redis db and C language. So I was in hardship.

same result , but it's not expandable code.

memcpy(obj, key, sizeof(struct dict_user_key));

struct dict_order_key {
    uint64_t    order_id;
};
...

static void *dict_order_key_dup(const void *key)
{
    struct dict_order_key *obj = malloc(sizeof(struct dict_order_key));
    memcpy(obj, key, sizeof(struct dict_order_key));
    return obj;
}
  1. no consistency of codes, some where checking null , some where not.
  2. it's recommended the member variable copy. obj->order_id = key->order_id
    in future you expand struct , then this code will be more safe and expandable easily.

readhistory and matchengine compile error: libmysqlclient In function `yaSSLv3_server_method'

I try to compile the readhistory and matchengine package using make command . but it seems something is wrong in libmysqlclient. Anyone can help me solve this problem? Thank you very much.

The error messages are as follows:

while I compiled the C files , the following errors show: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(my_default.cc.o):(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to __gxx_personality_v0'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(ssl.cpp.o): In functionyaSSLv3_server_method': (.text+0x60): undefined reference to operator new(unsigned long)'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(ssl.cpp.o): In functionyaSSLv3_server_method': (.text+0x9e): undefined reference to operator delete(void*)'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(ssl.cpp.o): In functionyaSSLv3_client_method': (.text+0xe0): undefined reference to operator new(unsigned long)'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(ssl.cpp.o): In functionyaSSLv3_client_method': (.text+0x121): undefined reference to operator delete(void*)'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(ssl.cpp.o): In functionyaTLSv1_server_method': (.text+0x173): undefined reference to operator new(unsigned long)'
.....
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(ripemd.cpp.o):(.data.rel.ro._ZTIN8TaoCrypt9RIPEMD160E[_ZTIN8TaoCrypt9RIPEMD160E]+0x0): undefined reference tovtable for __cxxabiv1::__si_class_type_info' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(dh.cpp.o): In function TaoCrypt::DH::GeneratePrivate(TaoCrypt::RandomNumberGenerator&, unsigned char*)':
(.text+0x122): undefined reference tooperator delete' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(dh.cpp.o): In function TaoCrypt::DH::GeneratePrivate(TaoCrypt::RandomNumberGenerator&, unsigned char*)':
(.text+0x145): undefined reference tooperator delete' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(dh.cpp.o): In function TaoCrypt::DH::GeneratePrivate(TaoCrypt::RandomNumberGenerator&, unsigned char*)':
(.text+0x162): undefined reference tooperator delete' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(dh.cpp.o): In function TaoCrypt::DH::GeneratePrivate(TaoCrypt::RandomNumberGenerator&, unsigned char*)':
(.text+0x1a0): undefined reference tooperator delete' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(dh.cpp.o): In function TaoCrypt::DH::GeneratePublic(unsigned char const*, unsigned char*)':
(.text+0x2b3): undefined reference tooperator delete' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libmysqlclient.a(dh.cpp.o):(.text+0x2d0): more undefined references to `operator delete' follow

Unique id in balance.update

There is rather specific problem with lack of unique id's in balance.update - it leads React application to rerender the whole array of entries because keys are not unique.
I'm convinced that besides React it might lead to problems in other cases, for example caching or logging.
Also it's a bit inconsistent with deals and orders :)

I am in trouble to install viabtc_server

Error Message
/root/exsv/matchengine/me_message.c:45: undefined reference to `rd_kafka_last_error'

Even if I do my best, I couldn't find any solutions up to now.
The list of what I do

  1. I changed all position of options for compiling
    ex) -Wl,-Bstatic -lev -ljansson -lmpdec -lmysqlclient -lz -lrt -lstdc++ -lrdkafka -lssl -lcrypto -lhiredis -Wl,-Bdynamic -lm -lpthread -ldl
  2. I changed rdkafka.h on the last version 0.94.

There are any other ways?

balance update return repeat update

你好:
第一次运行结果
./cli.exe 192.168.0.100 7316 102 '[1, "LTC", "deposit", 10001, "100000",{}]'
{
"id": 0,
"error": null,
"result": {
"status": "success"
}
}

第二次得到
./cli.exe 192.168.0.100 7316 102 '[1, "LTC", "deposit", 10001, "100000",{}]'
{
"id": 0,
"error": {
"message": "repeat update",
"code": 10
},
"result": null
}

查看代码是下面返回了-1
int update_user_balance(bool real, uint32_t user_id, const char *asset, const char *business, uint64_t business_id, mpd_t *change, json_t *detail)
{
struct update_key key;
key.user_id = user_id;
strncpy(key.asset, asset, sizeof(key.asset));
strncpy(key.business, business, sizeof(key.business));
key.business_id = business_id;

dict_entry *entry = dict_find(dict_update, &key);
if (entry) {
    return -1;
}

..........

请问这样设计的逻辑是什么?

///////////
另外,是否有情况发生这样的事,有人攻破进入martchmachine部署的服务器,随意修改balance,然后随意下单,引起市场价格剧烈波动。

感谢。

length of order skip list hasn't been decreased

Probably I am wrong, but it seems like sometimes the length of order skip list hasn't decreased during order cancel.

[2017-10-10 10:29:10.573691] [23467] [trace]me_server.c:35(reply_json): connection: 127.0.0.1:47238 send: {
    "error": null,
    "result": {
        "offset": 0,
        "limit": 0,
        "total": 1, <----- should be zero?
        "orders": []
    },
    "id": 1507631350
}

Finished order, price zero.

Hey @haipome @djpnewton, sometimes we ended up with zero price in mysql for one of the finished orders, have you encountered the same situation or probably it is expected behaviour?

mysql> select * from order_history_1 where id = 771;
+-----+-------------------+-------------------+---------+--------+----------+---+------+------------+-------------+-----------+-----------+-------------+-----------------------+---------------------+
| id  | create_time       | finish_time       | user_id | market | source   | t | side | price      | amount      | taker_fee | maker_fee | deal_stock  | deal_money            | deal_fee            |
+-----+-------------------+-------------------+---------+--------+----------+---+------+------------+-------------+-----------+-----------+-------------+-----------------------+---------------------+
| 771 | 1509663714.417587 | 1509663714.417595 |       1 | BTCXRP | frontend | 2 |    1 | 0.00000000 | 15.12900000 |    0.0250 |    0.0000 | 15.12900000 | 1860.8670000000000000 | 46.5216750000000000 |
+-----+-------------------+-------------------+---------+--------+----------+---+------+------------+-------------+-----------+-----------+-------------+-----------------------+---------------------+
mysql> select * from order_detail_71 where id = 771;
+-----+-------------------+-------------------+---------+--------+----------+---+------+------------+-------------+-----------+-----------+-------------+-----------------------+---------------------+
| id  | create_time       | finish_time       | user_id | market | source   | t | side | price      | amount      | taker_fee | maker_fee | deal_stock  | deal_money            | deal_fee            |
+-----+-------------------+-------------------+---------+--------+----------+---+------+------------+-------------+-----------+-----------+-------------+-----------------------+---------------------+
| 771 | 1509663714.417587 | 1509663714.417595 |       1 | BTCXRP | frontend | 2 |    1 | 0.00000000 | 15.12900000 |    0.0250 |    0.0000 | 15.12900000 | 1860.8670000000000000 | 46.5216750000000000 |
+-----+-------------------+-------------------+---------+--------+----------+---+------+------------+-------------+-----------+-----------+-------------+-----------------------+---------------------+

But in the deals the price is not equals to zero 🤔

mysql> select * from deal_history_71 where order_id = 771;
+----+-------------------+---------+---------+----------+---------------+------+--------------+-------------+-----------------------+---------------------+--------------------+
| id | time              | user_id | deal_id | order_id | deal_order_id | role | price        | amount      | deal                  | fee                 | deal_fee           |
+----+-------------------+---------+---------+----------+---------------+------+--------------+-------------+-----------------------+---------------------+--------------------+
|  6 | 1509663714.417595 |       1 |     283 |      771 |           765 |    2 | 123.00000000 | 15.12900000 | 1860.8670000000000000 | 46.5216750000000000 | 0.3782250000000000 |
+----+-------------------+---------+---------+----------+---------------+------+--------------+-------------+-----------------------+---------------------+--------------------+

How to add second, third main trade currency

Now in exchange server there is only one main trade currency - BCH, all assets are trading against BCH. How can I add BTC, ETH, USD, EUR or more currencies for trading pairs.
For example, now I can trade only ETH/BCH, but I want to trade ETH/USD, ETH/BTC or may be even ETH/NEO. Could anybody help ?

关于安装viabtc_exchange_server的问题.

首先谢谢作者的开源.
在部署viabtc_exchange_server过程忠,目前碰到两个问题想请教一下作者.

1 marketprice中redis_sentinel_connect_master会被定时调用获取redis主节点,
代码中我并没有找到对于redis_sentinel_connect_master的定时器发起点,
所以只能猜测这个定时器只是单纯用来时刻获取主节点的.
但从netstat看来,这个连接并没有长链,都是发起一次关闭一次的.
所以想请问,这个行为是正确的吗?

2.matchengine启动时报错
[2017-11-27 10:30:37.701069] [11483] [error]me_persist.c:96(load_operlog_from_db): table operlog_20171127 not exist
这是正常的吗?
如果不正常,是否是要做个定时任务每天根据operlog_example来创建operlog_ymd表?

kafka deals数据堆积

每秒3000笔的下单时,deals数据会堆积,marketprice消费速度开始正常后面就非常慢,kafka服务器没打印错误日志。
用python写的代码消费deals数据,没有出现问题
不知道该如何定位和解决? 非常感谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.