Skip to content

pubnub_version_posix.cpp: missing extern "C" causes linker failure when building with WITH_CPP=ON #242

@spectrbro

Description

@spectrbro

Hi,

I have had trouble compiling pubnub with cmake the last days and think I narrowed it down to a problem in:

  • c-core/cpp/pubnub_version_posix.cpp

The compiler kept spitting out the following:

Undefined symbols for architecture arm64:
  "_pubnub_sdk_name", referenced from:
      _pbcc_uname in libpubnub.a[6](pubnub_ccore_pubsub.c.o)
      _pbcc_publish_prep in libpubnub.a[6](pubnub_ccore_pubsub.c.o)
      _pbcc_signal_prep in libpubnub.a[6](pubnub_ccore_pubsub.c.o)
      _pbcc_subscribe_prep in libpubnub.a[6](pubnub_ccore_pubsub.c.o)
  "_pubnub_uagent", referenced from:
      _pbnc_fsm in libpubnub.a[8](pubnub_netcore.c.o)
  "_pubnub_uname", referenced from:
      _pbcc_uname in libpubnub.a[6](pubnub_ccore_pubsub.c.o)
      _pbcc_publish_prep in libpubnub.a[6](pubnub_ccore_pubsub.c.o)
      _pbcc_signal_prep in libpubnub.a[6](pubnub_ccore_pubsub.c.o)
      _pbcc_subscribe_prep in libpubnub.a[6](pubnub_ccore_pubsub.c.o)
ld: symbol(s) not found for architecture arm64

Running nm c-core/libpubnub-cpp.a | grep -E "uname|uagent|sdk_name" (after building) listed the following:

0000000000000018 T __Z12pubnub_unamev
0000000000000024 T __Z13pubnub_uagentv
0000000000000000 T __Z15pubnub_sdk_namev

I simply added (to pubnub_version_posix.cpp):

#if PUBNUB_USE_EXTERN_C
extern "C" {
#endif
#include "core/pubnub_version.h"
#include "core/pubnub_version_internal.h"
#if PUBNUB_USE_EXTERN_C
}
#endif

and now it seems to compile just fine.

nm c-core/libpubnub-cpp.a | grep -E "uname|uagent|sdk_name" now lists the proper symbol that is looked for:

0000000000000000 T _pubnub_sdk_name
0000000000000024 T _pubnub_uagent
0000000000000018 T _pubnub_uname

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions