nim-lang/mongo

could not import: bson_iterator_int

Closed this issue · 7 comments

OS: Ubuntu 14.04 x64

Mongo C driver: https://github.com/mongodb/mongo-c-driver
/usr/lib/libmongoc.so
/usr/lib/libbson.so

$ nimrod c ./mongo/tests/mongo.nim

$ ./mongo/tests/mono
could not import: bson_iterator_int

$ nm -D /usr/lib/libmongoc.so 
                 U accept
                 U bind
                 U bson_append_array
                 U bson_append_array_begin
                 U bson_append_array_end
                 U bson_append_binary
                 U bson_append_bool
                 U bson_append_date_time
                 U bson_append_document
                 U bson_append_document_begin
                 U bson_append_document_end
                 U bson_append_int32
                 U bson_append_int64
                 U bson_append_iter
                 U bson_append_utf8
                 U bson_append_value
                 U bson_as_json
                 U bson_concat
                 U bson_copy
                 U bson_copy_to
                 U bson_copy_to_excluding
                 U bson_count_keys
                 U bson_destroy
                 U bson_free
                 U bson_get_data
                 U bson_get_monotonic_time
                 U bson_gettimeofday
                 U bson_has_field
                 U bson_init
                 U bson_init_static
                 U bson_iter_array
                 U bson_iter_as_bool
                 U bson_iter_as_int64
                 U bson_iter_binary
                 U bson_iter_bool
                 U bson_iter_date_time
                 U bson_iter_document
                 U bson_iter_double
                 U bson_iter_dup_utf8
                 U bson_iter_find
                 U bson_iter_find_descendant
                 U bson_iter_init
                 U bson_iter_init_find
                 U bson_iter_init_find_case
                 U bson_iter_int32
                 U bson_iter_int64
                 U bson_iter_key
                 U bson_iter_next
                 U bson_iter_overwrite_int32
                 U bson_iter_recurse
                 U bson_iter_type
                 U bson_iter_utf8
                 U bson_iter_value
                 U bson_malloc
                 U bson_malloc0
                 U bson_md5_append
                 U bson_md5_finish
                 U bson_md5_init
                 U bson_new
                 U bson_oid_init
                 U bson_reader_destroy
                 U bson_reader_new_from_data
                 U bson_reader_read
                 U bson_realloc
                 U bson_set_error
                 U bson_sized_new
                 U bson_snprintf
                 U bson_strdup
                 U bson_strdup_printf
                 U bson_strdupv_printf
                 U bson_strerror_r
                 U bson_string_append_c
                 U bson_string_append_printf
                 U bson_string_append_unichar
                 U bson_string_free
                 U bson_string_new
                 U bson_strncpy
                 U bson_strndup
                 U bson_uint32_to_string
                 U bson_utf8_get_char
                 U bson_utf8_next_char
                 U bson_utf8_validate
                 U bson_validate
                 U bson_value_copy
                 U bson_value_destroy
                 U bson_zero_free
                 U close
                 U connect
                 U __ctype_b_loc
                 U __cxa_atexit
                 w __cxa_finalize
                 U __errno_location
                 U fcntl
                 U __fprintf_chk
                 U freeaddrinfo
                 U fsync
                 U ftruncate
                 U getaddrinfo
                 U getenv
                 U getnameinfo
                 U get_nprocs
                 U getpagesize
                 U getpeername
                 U getpid
                 U getsockname
                 U getsockopt
                 w __gmon_start__
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 w _Jv_RegisterClasses
                 U listen
                 U localtime_r
                 U memcmp
                 U memcpy
                 U __memcpy_chk
                 U memmove
                 U memset
                 U mmap
0000000000007b40 T mongoc_bulk_operation_delete
0000000000007ba0 T mongoc_bulk_operation_delete_one
0000000000007ab0 T mongoc_bulk_operation_destroy
0000000000007f60 T mongoc_bulk_operation_execute
0000000000007c00 T mongoc_bulk_operation_insert
0000000000007c70 T mongoc_bulk_operation_replace_one
0000000000007d30 T mongoc_bulk_operation_update
0000000000007e50 T mongoc_bulk_operation_update_one
0000000000011820 T mongoc_cleanup
0000000000008b40 T mongoc_client_command
0000000000008c30 T mongoc_client_command_simple
00000000000088a0 T mongoc_client_destroy
0000000000008960 T mongoc_client_get_collection
0000000000008940 T mongoc_client_get_database
0000000000008cd0 T mongoc_client_get_database_names
0000000000008980 T mongoc_client_get_gridfs
0000000000008f30 T mongoc_client_get_max_bson_size
0000000000008f20 T mongoc_client_get_max_message_size
0000000000008a00 T mongoc_client_get_read_prefs
0000000000008f40 T mongoc_client_get_server_status
0000000000008920 T mongoc_client_get_uri
00000000000089a0 T mongoc_client_get_write_concern
0000000000008750 T mongoc_client_new
0000000000008880 T mongoc_client_new_from_uri
0000000000009140 T mongoc_client_pool_destroy
0000000000009000 T mongoc_client_pool_new
00000000000091d0 T mongoc_client_pool_pop
00000000000092b0 T mongoc_client_pool_push
0000000000009250 T mongoc_client_pool_try_pop
0000000000008a10 T mongoc_client_set_read_prefs
00000000000089b0 T mongoc_client_set_write_concern
000000000000c7a0 T mongoc_collection_aggregate
000000000000c700 T mongoc_collection_command
000000000000cb00 T mongoc_collection_command_simple
000000000000cb60 T mongoc_collection_count
000000000000e2d0 T mongoc_collection_create_bulk_operation
000000000000d1e0 T mongoc_collection_create_index
000000000000db00 T mongoc_collection_delete
000000000000c5f0 T mongoc_collection_destroy
000000000000cd30 T mongoc_collection_drop
000000000000cdd0 T mongoc_collection_drop_index
000000000000d870 T mongoc_collection_ensure_index
000000000000c660 T mongoc_collection_find
000000000000e300 T mongoc_collection_find_and_modify
000000000000dcf0 T mongoc_collection_get_last_error
000000000000dce0 T mongoc_collection_get_name
000000000000dc20 T mongoc_collection_get_read_prefs
000000000000dc80 T mongoc_collection_get_write_concern
000000000000d090 T mongoc_collection_insert
000000000000cf60 T mongoc_collection_insert_bulk
000000000000ce90 T mongoc_collection_keys_to_index_string
000000000000de70 T mongoc_collection_rename
000000000000da20 T mongoc_collection_save
000000000000dc30 T mongoc_collection_set_read_prefs
000000000000dc90 T mongoc_collection_set_write_concern
000000000000e150 T mongoc_collection_stats
000000000000d880 T mongoc_collection_update
000000000000dd00 T mongoc_collection_validate
000000000000ff90 T mongoc_cursor_clone
000000000000ffe0 T mongoc_cursor_current
000000000000f6e0 T mongoc_cursor_destroy
000000000000f740 T mongoc_cursor_error
000000000000fe70 T mongoc_cursor_get_host
000000000000ffb0 T mongoc_cursor_is_alive
000000000000fd50 T mongoc_cursor_more
000000000000fce0 T mongoc_cursor_next
0000000000010a60 T mongoc_database_add_user
0000000000010700 T mongoc_database_command
0000000000010750 T mongoc_database_command_simple
0000000000011480 T mongoc_database_create_collection
00000000000106b0 T mongoc_database_destroy
0000000000010780 T mongoc_database_drop
00000000000117c0 T mongoc_database_get_collection
0000000000011220 T mongoc_database_get_collection_names
00000000000117d0 T mongoc_database_get_name
0000000000010ef0 T mongoc_database_get_read_prefs
0000000000010f50 T mongoc_database_get_write_concern
0000000000010fb0 T mongoc_database_has_collection
0000000000010960 T mongoc_database_remove_all_users
0000000000010820 T mongoc_database_remove_user
0000000000010f00 T mongoc_database_set_read_prefs
0000000000010f60 T mongoc_database_set_write_concern
0000000000011c30 T mongoc_gridfs_create_file
0000000000011b50 T mongoc_gridfs_create_file_from_stream
0000000000011a40 T mongoc_gridfs_destroy
0000000000011a00 T mongoc_gridfs_drop
0000000000012b70 T mongoc_gridfs_file_destroy
0000000000012f70 T mongoc_gridfs_file_error
0000000000012230 T mongoc_gridfs_file_get_aliases
0000000000012fc0 T mongoc_gridfs_file_get_chunk_size
00000000000121d0 T mongoc_gridfs_file_get_content_type
0000000000012170 T mongoc_gridfs_file_get_filename
0000000000012fb0 T mongoc_gridfs_file_get_length
0000000000012110 T mongoc_gridfs_file_get_md5
00000000000122a0 T mongoc_gridfs_file_get_metadata
0000000000012fd0 T mongoc_gridfs_file_get_upload_date
0000000000013200 T mongoc_gridfs_file_list_destroy
00000000000131f0 T mongoc_gridfs_file_list_error
00000000000131b0 T mongoc_gridfs_file_list_next
0000000000012c90 T mongoc_gridfs_file_readv
0000000000012310 T mongoc_gridfs_file_save
0000000000012e80 T mongoc_gridfs_file_seek
0000000000012260 T mongoc_gridfs_file_set_aliases
00000000000121f0 T mongoc_gridfs_file_set_content_type
0000000000012190 T mongoc_gridfs_file_set_filename
0000000000012130 T mongoc_gridfs_file_set_md5
00000000000122d0 T mongoc_gridfs_file_set_metadata
0000000000012f60 T mongoc_gridfs_file_tell
0000000000012d80 T mongoc_gridfs_file_writev
0000000000011a60 T mongoc_gridfs_find
0000000000011a70 T mongoc_gridfs_find_one
0000000000011ab0 T mongoc_gridfs_find_one_by_filename
0000000000011c50 T mongoc_gridfs_get_chunks
0000000000011c40 T mongoc_gridfs_get_files
0000000000013220 T mongoc_index_opt_get_default
0000000000013230 T mongoc_index_opt_init
0000000000011800 T mongoc_init
0000000000013470 T mongoc_log
0000000000013600 T mongoc_log_default_handler
0000000000013560 T mongoc_log_level_str
0000000000013410 T mongoc_log_set_handler
0000000000015380 T mongoc_matcher_destroy
0000000000015370 T mongoc_matcher_match
00000000000152c0 T mongoc_matcher_new
00000000000156b0 T mongoc_read_prefs_add_tag
00000000000158d0 T mongoc_read_prefs_copy
00000000000158a0 T mongoc_read_prefs_destroy
0000000000015640 T mongoc_read_prefs_get_mode
0000000000015660 T mongoc_read_prefs_get_tags
0000000000015780 T mongoc_read_prefs_is_valid
0000000000015610 T mongoc_read_prefs_new
0000000000015650 T mongoc_read_prefs_set_mode
0000000000015670 T mongoc_read_prefs_set_tags
00000000000173b0 T mongoc_socket_accept
00000000000174d0 T mongoc_socket_bind
0000000000017500 T mongoc_socket_close
0000000000017560 T mongoc_socket_connect
0000000000017610 T mongoc_socket_destroy
00000000000173a0 T mongoc_socket_errno
0000000000017b20 T mongoc_socket_getnameinfo
0000000000017af0 T mongoc_socket_getsockname
0000000000017640 T mongoc_socket_listen
0000000000017680 T mongoc_socket_new
0000000000017700 T mongoc_socket_recv
0000000000017ad0 T mongoc_socket_send
0000000000017930 T mongoc_socket_sendv
00000000000177a0 T mongoc_socket_setsockopt
0000000000017eb0 T mongoc_stream_buffered_new
0000000000017bc0 T mongoc_stream_close
0000000000017c30 T mongoc_stream_cork
0000000000017bd0 T mongoc_stream_destroy
0000000000018080 T mongoc_stream_file_get_fd
0000000000018000 T mongoc_stream_file_new
0000000000018050 T mongoc_stream_file_new_for_path
0000000000017be0 T mongoc_stream_flush
0000000000017c90 T mongoc_stream_get_base_stream
0000000000018180 T mongoc_stream_gridfs_new
0000000000017c10 T mongoc_stream_read
0000000000017c00 T mongoc_stream_readv
0000000000017c70 T mongoc_stream_setsockopt
0000000000018440 T mongoc_stream_socket_get_socket
0000000000018450 T mongoc_stream_socket_new
0000000000017c50 T mongoc_stream_uncork
0000000000017bf0 T mongoc_stream_writev
0000000000019890 T mongoc_uri_copy
00000000000189a0 T mongoc_uri_destroy
0000000000018860 T mongoc_uri_get_auth_mechanism
0000000000018900 T mongoc_uri_get_auth_source
00000000000188f0 T mongoc_uri_get_database
00000000000187e0 T mongoc_uri_get_hosts
0000000000018990 T mongoc_uri_get_options
00000000000188e0 T mongoc_uri_get_password
0000000000018a50 T mongoc_uri_get_read_prefs
00000000000187f0 T mongoc_uri_get_replica_set
00000000000198b0 T mongoc_uri_get_ssl
0000000000018a40 T mongoc_uri_get_string
00000000000188d0 T mongoc_uri_get_username
00000000000198a0 T mongoc_uri_get_write_concern
0000000000019230 T mongoc_uri_new
0000000000019850 T mongoc_uri_new_for_host_port
0000000000018a60 T mongoc_uri_unescape
000000000001b920 T mongoc_write_concern_copy
000000000001b980 T mongoc_write_concern_destroy
000000000001b9d0 T mongoc_write_concern_get_fsync
000000000001ba30 T mongoc_write_concern_get_journal
000000000001ba90 T mongoc_write_concern_get_w
000000000001bb50 T mongoc_write_concern_get_wmajority
000000000001bbb0 T mongoc_write_concern_get_wtag
000000000001baf0 T mongoc_write_concern_get_wtimeout
000000000001b900 T mongoc_write_concern_new
000000000001b9e0 T mongoc_write_concern_set_fsync
000000000001ba40 T mongoc_write_concern_set_journal
000000000001baa0 T mongoc_write_concern_set_w
000000000001bb60 T mongoc_write_concern_set_wmajority
000000000001bbc0 T mongoc_write_concern_set_wtag
000000000001bb00 T mongoc_write_concern_set_wtimeout
                 U open
                 U poll
                 U __printf_chk
                 U pthread_cond_destroy
                 U pthread_cond_signal
                 U pthread_cond_wait
                 U pthread_mutex_destroy
                 U pthread_mutex_init
                 U pthread_mutex_lock
                 U pthread_mutex_unlock
                 U pthread_once
                 U putchar
                 U rand
                 U readv
                 U recv
                 U sched_getcpu
                 U send
                 U sendmsg
                 U setsockopt
                 U shm_open
                 U shm_unlink
                 U shutdown
                 U socket
                 U sscanf
                 U __stack_chk_fail
                 U stderr
                 U stdout
                 U strcasecmp
                 U strchr
                 U strcmp
                 U strftime
                 U strlen
                 U strncmp
                 U strrchr
                 U strstr
                 U strtol
                 U syscall
                 U time
                 U writev


$ nm -D /usr/lib/libbson.so 
                 U abort
                 U __assert_fail
000000000000b1a0 T bcon_append
000000000000b070 T bcon_append_ctx
000000000000b190 T bcon_append_ctx_init
0000000000009e20 T bcon_append_ctx_va
000000000000afa0 T bcon_extract
000000000000b100 T bcon_extract_ctx
000000000000af90 T bcon_extract_ctx_init
000000000000a670 T bcon_extract_ctx_va
000000000000b270 T bcon_new
000000000000c370 T bson_append_array
000000000000c330 T bson_append_array_begin
000000000000c340 T bson_append_array_end
000000000000c410 T bson_append_binary
000000000000c580 T bson_append_bool
000000000000c600 T bson_append_code
000000000000d460 T bson_append_code_with_scope
000000000000cec0 T bson_append_date_time
000000000000c6a0 T bson_append_dbpointer
000000000000c750 T bson_append_document
000000000000c350 T bson_append_document_begin
000000000000c360 T bson_append_document_end
000000000000c7f0 T bson_append_double
000000000000c870 T bson_append_int32
000000000000c8f0 T bson_append_int64
000000000000d590 T bson_append_iter
000000000000c980 T bson_append_maxkey
000000000000c9f0 T bson_append_minkey
000000000000cfa0 T bson_append_now_utc
000000000000ca60 T bson_append_null
000000000000cad0 T bson_append_oid
000000000000cb50 T bson_append_regex
000000000000cd20 T bson_append_symbol
000000000000ce20 T bson_append_timestamp
000000000000cf80 T bson_append_time_t
000000000000cf40 T bson_append_timeval
000000000000cfd0 T bson_append_undefined
000000000000cc50 T bson_append_utf8
000000000000dc60 T bson_append_value
000000000000e150 T bson_as_json
0000000000009840 T bson_bcone_magic
0000000000009830 T bson_bcon_magic
000000000000e090 T bson_compare
000000000000e370 T bson_concat
000000000000e7a0 T bson_context_destroy
000000000000e870 T bson_context_get_default
000000000000e5f0 T bson_context_new
000000000000d2a0 T bson_copy
000000000000d2c0 T bson_copy_to
000000000000db10 T bson_copy_to_excluding
000000000000dfd0 T bson_count_keys
000000000000d410 T bson_destroy
000000000000e130 T bson_equal
0000000000013260 T bson_free
000000000000d440 T bson_get_data
000000000000e3f0 T bson_get_monotonic_time
000000000000e3e0 T bson_gettimeofday
000000000000e040 T bson_has_field
000000000000d040 T bson_init
00000000000124a0 T bson_init_from_json
000000000000d0a0 T bson_init_static
000000000000f4a0 T bson_iter_array
000000000000f010 T bson_iter_as_bool
000000000000f0a0 T bson_iter_as_int64
000000000000ef00 T bson_iter_binary
000000000000ef80 T bson_iter_bool
000000000000f220 T bson_iter_code
000000000000f270 T bson_iter_codewscope
000000000000f390 T bson_iter_date_time
000000000000f2e0 T bson_iter_dbpointer
000000000000f460 T bson_iter_document
000000000000efa0 T bson_iter_double
000000000000f1b0 T bson_iter_dup_utf8
000000000000ee30 T bson_iter_find
000000000000ee80 T bson_iter_find_case
000000000000f5a0 T bson_iter_find_descendant
000000000000e9a0 T bson_iter_init
000000000000ee40 T bson_iter_init_find
000000000000eec0 T bson_iter_init_find_case
000000000000efd0 T bson_iter_int32
000000000000eff0 T bson_iter_int64
000000000000ea20 T bson_iter_key
000000000000ea40 T bson_iter_next
000000000000f110 T bson_iter_oid
000000000000fed0 T bson_iter_overwrite_bool
000000000000ff30 T bson_iter_overwrite_double
000000000000fef0 T bson_iter_overwrite_int32
000000000000ff10 T bson_iter_overwrite_int64
000000000000f4e0 T bson_iter_recurse
000000000000f130 T bson_iter_regex
000000000000f350 T bson_iter_symbol
000000000000f3e0 T bson_iter_timestamp
000000000000f3b0 T bson_iter_time_t
000000000000f420 T bson_iter_timeval
000000000000ea30 T bson_iter_type
000000000000f160 T bson_iter_utf8
000000000000ff50 T bson_iter_value
000000000000f6e0 T bson_iter_visit_all
0000000000012400 T bson_json_data_reader_ingest
00000000000123c0 T bson_json_data_reader_new
0000000000012360 T bson_json_reader_destroy
00000000000122c0 T bson_json_reader_new
0000000000012530 T bson_json_reader_new_from_fd
0000000000012580 T bson_json_reader_new_from_file
00000000000120f0 T bson_json_reader_read
0000000000013210 T bson_malloc
0000000000013230 T bson_malloc0
0000000000013020 T bson_md5_append
0000000000013140 T bson_md5_finish
0000000000012ff0 T bson_md5_init
000000000000d110 T bson_new
000000000000d220 T bson_new_from_data
0000000000012420 T bson_new_from_json
00000000000134b0 T bson_oid_compare
00000000000134e0 T bson_oid_copy
00000000000134c0 T bson_oid_equal
00000000000133d0 T bson_oid_get_time_t
0000000000013480 T bson_oid_hash
0000000000013300 T bson_oid_init
0000000000013360 T bson_oid_init_from_data
0000000000013370 T bson_oid_init_from_string
00000000000132c0 T bson_oid_init_sequence
00000000000134f0 T bson_oid_is_valid
00000000000133e0 T bson_oid_to_string
00000000000137e0 T bson_reader_destroy
00000000000137a0 T bson_reader_new_from_data
0000000000013760 T bson_reader_new_from_fd
0000000000013a60 T bson_reader_new_from_file
00000000000136e0 T bson_reader_new_from_handle
0000000000013850 T bson_reader_read
00000000000136d0 T bson_reader_set_destroy_func
00000000000136c0 T bson_reader_set_read_func
0000000000013a00 T bson_reader_tell
0000000000013270 T bson_realloc
000000000000d070 T bson_reinit
000000000000e8a0 T bson_set_error
000000000000d150 T bson_sized_new
0000000000014120 T bson_snprintf
0000000000013dc0 T bson_strdup
0000000000014080 T bson_strdup_printf
0000000000013f20 T bson_strdupv_printf
000000000000e950 T bson_strerror_r
0000000000013e40 T bson_strfreev
0000000000013bf0 T bson_string_append
0000000000013ca0 T bson_string_append_c
0000000000013fd0 T bson_string_append_printf
0000000000013ce0 T bson_string_append_unichar
0000000000013bb0 T bson_string_free
0000000000013af0 T bson_string_new
0000000000013d50 T bson_string_truncate
0000000000013ed0 T bson_strncpy
0000000000013e10 T bson_strndup
0000000000013e90 T bson_strnlen
0000000000012610 T bson_uint32_to_string
00000000000143e0 T bson_utf8_escape_for_json
0000000000014570 T bson_utf8_from_unichar
00000000000142a0 T bson_utf8_get_char
0000000000014350 T bson_utf8_next_char
00000000000141b0 T bson_utf8_validate
000000000000e290 T bson_validate
00000000000146f0 T bson_value_copy
00000000000148c0 T bson_value_destroy
0000000000013ef0 T bson_vsnprintf
00000000000149a0 T bson_writer_begin
0000000000014980 T bson_writer_destroy
0000000000014c10 T bson_writer_end
0000000000014990 T bson_writer_get_length
0000000000014940 T bson_writer_new
0000000000014cc0 T bson_writer_rollback
00000000000132a0 T bson_zero_free
                 U calloc
                 U clock_gettime
                 U close
                 U __ctype_b_loc
                 U __cxa_atexit
                 w __cxa_finalize
                 U __errno_location
                 U __fprintf_chk
                 U free
                 U gethostname
                 U getpid
                 U gettimeofday
                 w __gmon_start__
                 U __isinf
                 U __isnan
                 U __isoc99_sscanf
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
                 w _Jv_RegisterClasses
                 U malloc
                 U memcmp
                 U memcpy
                 U memmove
                 U memset
                 U open
                 U pthread_once
                 U rand_r
                 U read
                 U realloc
                 U snprintf
                 U __snprintf_chk
                 U __sprintf_chk
                 U __stack_chk_fail
                 U stderr
                 U stpcpy
                 U strcasecmp
                 U strchr
                 U strcmp
                 U strcpy
                 U strlen
                 U strncmp
                 U strncpy
                 U strspn
                 U strtod
                 U syscall
                 U time
                 U __vsnprintf_chk
                 U __xpg_strerror_r

bson_iterator_* >>> bson_iter_*

bson_iterator_* is for v0.8.1

git checkout v0.8.1

bson_iter_* is for v1.0

Ok so several things have changed, and I must've used the wrong version as a reference. I'll have to figure out if it's better to run a recent version of the C driver through c2nim rather than manually patching the module.

There's no point in doing manual patching. I've got a module with the new symbols now, and the high level wrapper should be usable in 1-2 weeks.

Apparently there's a lack of documentation for the new protocol, but I'll wrap the C driver if I can't get this to work (communication directly via sockets).

And by 1-2 weeks I really meant a little more than 2 weeks :p
I'll obliterate the old interface and replace it with the new one in a couple of hours.

I've added the new code. There are TODO comments everywhere as you can see, and you might have to import bson and mongo in addition to db_mongo. I don't know if I should do anything about that.

Currently the only demonstration code that exists is tests/tmongo.nim. BSON construction should remain roughly the same.