How to compile reader.c and writer.c in the blog examples?

17 views
Skip to first unread message

Jerry Ajay

unread,
Apr 17, 2020, 10:32:25 AM4/17/20
to pmem
Hi,
   When I use the naive `gcc writer.c` in the blog example at: https://pmem.io/2015/06/13/accessing-pmem.html . I get the underfined reference error:
/tmp/cc9pDRyw.o: In function `pmemobj_direct_inline':
writer.c:(.text+0x41): undefined reference to `_pobj_cached_pool'
writer.c:(.text+0x55): undefined reference to `_pobj_cache_invalidate'
writer.c:(.text+0x70): undefined reference to `_pobj_cache_invalidate'
writer.c:(.text+0x8a): undefined reference to `pmemobj_pool_by_oid'
/tmp/cc9pDRyw.o: In function `main':
writer.c:(.text+0x114): undefined reference to `pmemobj_create'
writer.c:(.text+0x146): undefined reference to `pmemobj_root'
writer.c:(.text+0x1ab): undefined reference to `pmemobj_persist'
writer.c:(.text+0x1ca): undefined reference to `pmemobj_memcpy_persist'
writer.c:(.text+0x1d6): undefined reference to `pmemobj_close'
collect2: error: ld returned 1 exit status

Similar situation with `gcc reader.c`:
/tmp/ccyyZuuB.o: In function `pmemobj_direct_inline':
reader.c:(.text+0x41): undefined reference to `_pobj_cached_pool'
reader.c:(.text+0x55): undefined reference to `_pobj_cache_invalidate'
reader.c:(.text+0x70): undefined reference to `_pobj_cache_invalidate'
reader.c:(.text+0x8a): undefined reference to `pmemobj_pool_by_oid'
/tmp/ccyyZuuB.o: In function `main':
reader.c:(.text+0xfc): undefined reference to `pmemobj_open'
reader.c:(.text+0x12b): undefined reference to `pmemobj_root'
reader.c:(.text+0x182): undefined reference to `pmemobj_close'
collect2: error: ld returned 1 exit status


The source code is exactly the same as shown in the blog example. 

How to resolve the loader error?

Tony Mason

unread,
Apr 17, 2020, 1:09:47 PM4/17/20
to pmem
At a minimum, you will want to link against the PMDK libraries that you're trying to use. 

Since these samples are in the PMDK, the easiest thing is probably just to look at how they build it. On my Fedora 31 system:

cc -c -o writer.o -std=gnu99 -ggdb -Wall -Werror -Wmissing-prototypes  -I../../../include -I. -I../../../examples  writer.c
LD_LIBRARY_PATH=/usr/lib64:/usr/lib64:/usr/lib64: cc -o writer writer.o -Wl,-rpath=../../../debug -L../../../debug  -lpmemobj -lpmem -pthread
cc -c -o reader.o -std=gnu99 -ggdb -Wall -Werror -Wmissing-prototypes  -I../../../include -I. -I../../../examples  reader.c
LD_LIBRARY_PATH=/usr/lib64:/usr/lib64:/usr/lib64: cc -o reader reader.o -Wl,-rpath=../../../debug -L../../../debug  -lpmemobj -lpmem -pthread

(pmdk/src/example/libpmemobj/string_store).

Tony

Jerry Ajay

unread,
Apr 17, 2020, 2:03:39 PM4/17/20
to pmem
Thank you. 
Reply all
Reply to author
Forward
0 new messages