# Julia call c++, could not load symbol

**URL:** <https://discourse.julialang.org/t/julia-call-c-could-not-load-symbol/84980>\
**Category:** General Usage\
**Tags:** ccall\
**Created:** [July 29, 2022, 2:21pm UTC](https://discourse.julialang.org/t/julia-call-c-could-not-load-symbol/84980 "2022-07-29T14:21:41Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![kongdd](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kongdd/32/17058_2.png) [@kongdd](https://discourse.julialang.org/u/kongdd)\
**Post date:** [July 29, 2022, 2:21pm UTC](https://discourse.julialang.org/t/julia-call-c-could-not-load-symbol/84980/1 "2022-07-29T14:21:41Z")

</div>

In the `debug.cpp`:

```cpp
#include <stdio.h>
// g++ -shared -fPIC -o debug.so debug.cpp

void show(int *a) {
    for (int i = 0; i < 10; i++) {
        printf("a[%d] = %d\n", i, a[i]);
    }
}

void hello() {
    printf("hello world");
}

```

Then compiled by the following command:  
`g++ -shared -fPIC -o debug.so debug.cpp`

When calling from Julia, I get the error **could not load symbol `show`:**

```julia
using Libdl

lib = "./debug.so"
a = ones(Cint, 10)
ccall((:show, lib), Cvoid,
  (Ptr{Cint},), a)

```

```julia
ERROR: LoadError: could not load symbol "show":
./debug.so: undefined symbol: show
Stacktrace:
 [1] top-level scope

```

---

<div class="post-metadata">

**Author:** ![danielmatz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/danielmatz/32/2285_2.png) [@danielmatz](https://discourse.julialang.org/u/danielmatz)\
**Post date:** [July 29, 2022, 2:34pm UTC](https://discourse.julialang.org/t/julia-call-c-could-not-load-symbol/84980/2 "2022-07-29T14:34:38Z")

</div>

The C++ compiler will mangle that name. When I run `nm debug.so`, I see something like:

```julia
0000000000003f30 T __Z4showPi
0000000000003f80 T __Z5hellov
                 U _printf

```

You need to use `extern "C"` to have C++ create a symbol that is C compatible. Just add this:

```julia
extern "C" {
void show(int*);
}

```

See: [What is the effect of extern "C" in C++? - Stack Overflow](https://stackoverflow.com/questions/1041866/what-is-the-effect-of-extern-c-in-c)

---

<div class="post-metadata">

**Author:** ![kongdd](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kongdd/32/17058_2.png) [@kongdd](https://discourse.julialang.org/u/kongdd)\
**Post date:** [July 29, 2022, 3:16pm UTC](https://discourse.julialang.org/t/julia-call-c-could-not-load-symbol/84980/3 "2022-07-29T15:16:41Z")

</div>

Awesome, it works. 👏
