2015-03-01 5 views
3

Здравствуйте.соединение gwan с аэрокосмическим db в C

Сначала я прошу прощения за мой ita-английский.

Я хочу использовать gwan с аэрокосмической, но при запуске сервлета ... проблема. Я начинаю с этого примера.c аэрокосмического. В файле example.c я поставил gwan.h и это выход ./gwan:

loading 
     hello.cs: to use .cs scripts, install C#.. 
     hello.lua: to use .lua scripts, install Lua 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Linking example.c: undefined symbol: g_namespace 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

To run G-WAN, you must fix the error(s) or remove this Servlet. 

Внутри example.c:

#include "gwan.h" 
#include <stdbool.h> 
#include <stddef.h> 
#include <stdint.h> 
#include <stdlib.h> 

#include <aerospike/aerospike.h> 
#include <aerospike/aerospike_key.h> 
#include <aerospike/aerospike_query.h> 
#include <aerospike/as_error.h> 
#include <aerospike/as_key.h> 
#include <aerospike/as_query.h> 
#include <aerospike/as_record.h> 
#include <aerospike/as_status.h> 
#include <aerospike/as_val.h> 
#include "example_utils.h" 
const char TEST_INDEX_NAME[] = "test-bin-index"; 
bool query_cb(const as_val* p_val, void* udata); 
void cleanup(aerospike* p_as); 
bool insert_records(aerospike* p_as); 
int 
main(int argc, char* argv[]) 
{ 
if (! example_get_opts(argc, argv, EXAMPLE_MULTI_KEY_OPTS)) { 
    exit(-1); 
} 
aerospike as; 
example_connect_to_aerospike(&as); 
example_remove_test_records(&as); 
example_remove_index(&as, TEST_INDEX_NAME); 
if (! example_create_integer_index(&as, "test-bin", TEST_INDEX_NAME)) 
{ 
    cleanup(&as); 
    exit(-1); 
} 
if (! insert_records(&as)) { 
    cleanup(&as); 
    exit(-1); 
} 
if (! example_read_test_records(&as)) { 
    cleanup(&as); 
    exit(-1); 
} 
as_error err; 
as_query query; 
as_query_init(&query, g_namespace, g_set); 
as_query_where_inita(&query, 1); 
as_query_where(&query, "test-bin", as_integer_equals(7)); 
LOG("executing query: where test-bin = 7"); 
if (aerospike_query_foreach(&as, &err, NULL, &query, query_cb, NULL) 
     != AEROSPIKE_OK) { 
    LOG("aerospike_query_foreach() returned %d - %s", err.code, 
      err.message); 
    as_query_destroy(&query); 
    cleanup(&as); 
    exit(-1); 
} 
LOG("query executed"); 
as_query_destroy(&query); 
cleanup(&as); 
LOG("simple query example successfully completed"); 
return 0; 
} 
bool 
query_cb(const as_val* p_val, void* udata) 
{ 
if (! p_val) { 
    LOG("query callback returned null - query is complete"); 
    return true; 
} 
as_record* p_rec = as_record_fromval(p_val); 
if (! p_rec) { 
    LOG("query callback returned non-as_record object"); 
    return true; 
} 
LOG("query callback returned record:"); 
example_dump_record(p_rec); 
return true; 
} 
void 
cleanup(aerospike* p_as) 
{ 
example_remove_test_records(p_as); 
example_remove_index(p_as, TEST_INDEX_NAME); 
example_cleanup(p_as); 
} 
bool 
insert_records(aerospike* p_as) 
{ 
set 
as_record rec; 
as_record_inita(&rec, 1); 
for (uint32_t i = 0; i < g_n_keys; i++) { 
    as_error err; 
    as_key key; 
    as_key_init_int64(&key, g_namespace, g_set, (int64_t)i); 
    as_record_set_int64(&rec, "test-bin", (int64_t)i); 
    if (aerospike_key_put(p_as, &err, NULL, &key, &rec) !=  AEROSPIKE_OK) { 
     LOG("aerospike_key_put() returned %d - %s", err.code, err.message); 
     return false; 
    } 
} 

LOG("insert succeeded"); 

return true; 
} 

как можно соединить aerospike с Гван? Спасибо

ответ

1

Вам нужна #pragma link ваша аэрокосмическая библиотека и убедитесь, что все необходимые файлы заголовков находятся в нужном месте. См. G-WAN FAQ или прочитайте пример кода в tar-файле G-WAN.

Кроме того, в G-WAN код возврата основной функции будет использоваться как код ответа HTTP, поэтому избегайте return -1;.

+0

я сделать это: ссылка #pragma "/usr/lib/libaerospike.so" #include "aerospike/aerospike.h" #include «aerospike/aerospike_key.h ", но теперь говорят:« Ссылка prova.c /usr/lib/libaerospike.so undefined symbol: RAND_seed » – user112752

+0

На данный момент G-WAN - это не стена, с которой вы столкнулись. Похоже, вы все еще не хватает некоторых аэрокосмических заголовков. Я попытался установить аэроспейс в свою систему, но кажется, что они предоставляют только 64-битные пакеты ... – Nagi

+0

Я удостоверился, что все 64-битные, моя система (debian7.8 64bit), аэросик, gwan и клиентский аэрокосмический компьютер. На данный момент я не знаю, что делать – user112752

0

неопределенный символ: g_namespace

сообщение об ошибке ясна. Пока эта переменная не определена, ваш сервлет C не будет компилироваться.

Я не знаю вашей библиотеки, но эта переменная, вероятно, определена в библиотеке include file - или должна быть определена конечным пользователем (вы). Проверьте документацию библиотеки.

0

Подробные шаги для запуска примера C-клиент Aerospike с G-WAN,

  1. Скачать и извлечь сервера деготь G-WAN в системе
  2. Вы можете запустить сервер G-WAN с помощью ./gwan сценария настоящее в извлеченной папке, например ./gwan_linux64-bit/
  3. Получить Aerospike C-клиент с https://github.com/aerospike/aerospike-client-c, и установить на вашей системе
  4. Copy example.c в ./gwan_linux64-bit/0.0.0.0_8080/#0.0.0.0/csp/
  5. Make следующие изменения example.c,

    • Добавить следующую директиву #pragma,
      #pragma include "/home/user/aerospike-client-c/examples/utils/src/include/"
      Это поможет найти example_utils.h, что необходимо для всех примеров скриптов на C-клиенте.
    • Добавить следующую директиву #pragma,
      #pragma link "/home/user/aerospike-client-c/examples/utils/src/main/example_utils.c"
      Мы должны связать example_utils.c, так как он имеет определение всех UTIL функций, используемые в примерах сценариев.
  6. Внесите изменения в возвращаемые значения. Восстановите правильные коды ошибок HTTP.

  7. Теперь у вас все в порядке.Запуск ./gwan сервер и получить доступ к веб-сервиса через браузер, http://127.0.0.1:8080/?example.c

+0

действительно спасибо !!! – user112752

+0

Добро пожаловать. Потерпите меня в любое время, если у вас возникнут какие-либо проблемы. –

 Смежные вопросы

  • Нет связанных вопросов^_^