problem with setLocale

In order to print unicode characters with llvm, I used setLocale in llvm ir:

call i8* @setlocale(i32 6, i8* getelementptr inbounds ([1 x i8]* @pe, i32 0, i32 0)) nounwind

where @pe is defined as follows:

@pe = private unnamed_addr constant [1 x i8] zeroinitializer, align 1

However, I got the following error:

*** glibc detected *** ./test/bin/executable: free(): invalid next size (fast): 0x08f93140 ***

I used gdb to debug the program and the backtrace is as follows:

#0 0xb7728424 in __kernel_vsyscall ()
#1 0xb74aee71 in raise () from /lib/i386-linux-gnu/
#2 0xb74b234e in abort () from /lib/i386-linux-gnu/
#3 0xb74e5577 in ?? () from /lib/i386-linux-gnu/
#4 0xb74ef961 in ?? () from /lib/i386-linux-gnu/
#5 0xb74f128b in ?? () from /lib/i386-linux-gnu/
#6 0xb74f441d in free () from /lib/i386-linux-gnu/
#7 0xb74a6730 in ?? () from /lib/i386-linux-gnu/
#8 0xb74a5299 in ?? () from /lib/i386-linux-gnu/
#9 0xb74a4cd1 in setlocale () from /lib/i386-linux-gnu/

How can I resolve this issue? Any help would be appreciated

Hi Ali, did you link your program statically? Try linking it dynamically.

Ciao, Duncan.

Hi Ciao, my compiler is written in java and generates some .ll files as its
output. Each of these .ll files is converted to an object file using llc.
Then, I use clang++ to link them and generate an executable file without
linking with any external libraries, so I cannot understand what you mean.
Sorry, if my question sounds silly to you

Hi Ali,

I didn't implement my own version of setlocale, and as you said clang should
automatically link with that library. I use the following simple command to
generate executable:
clang++ -o executable my-obj-files