1

I want to use json-c in my program. While compiling (linking) I'm getting errors:

parsejson.c:(.text.startup+0xf): undefined reference to `json_object_new_object'
parsejson.c:(.text.startup+0x1c): undefined reference to `json_object_new_string'
parsejson.c:(.text.startup+0x2b): undefined reference to `json_object_new_int'
parsejson.c:(.text.startup+0x3a): undefined reference to `json_object_new_boolean'
parsejson.c:(.text.startup+0x4a): undefined reference to `json_object_new_double'
parsejson.c:(.text.startup+0x52): undefined reference to `json_object_new_array'
parsejson.c:(.text.startup+0x5f): undefined reference to `json_object_new_string'
parsejson.c:(.text.startup+0x6e): undefined reference to `json_object_new_string'
parsejson.c:(.text.startup+0x7b): undefined reference to `json_object_new_string'
parsejson.c:(.text.startup+0x8b): undefined reference to `json_object_array_add'
parsejson.c:(.text.startup+0x96): undefined reference to `json_object_array_add'
parsejson.c:(.text.startup+0xa1): undefined reference to `json_object_array_add'
parsejson.c:(.text.startup+0xb3): undefined reference to `json_object_object_add'
parsejson.c:(.text.startup+0xc3): undefined reference to `json_object_object_add'
parsejson.c:(.text.startup+0xd3): undefined reference to `json_object_object_add'
parsejson.c:(.text.startup+0xe5): undefined reference to `json_object_object_add'
parsejson.c:(.text.startup+0xf5): undefined reference to `json_object_object_add'
parsejson.c:(.text.startup+0xfd): undefined reference to `json_object_to_json_string'

I've json-c and my program on the same folder and included it using #include <json-c/json.h>.

3
  • Show your compilation command line. Are you listing the library after parsejson.c or parsejson.o, whichever you list on the linking command line? Have you built the json-c library? Are you linking with it? Commented Jun 25, 2015 at 5:00
  • no i'm just using command "gcc parsejson.c", json-c is a third party lib but i've included using #include Commented Jun 25, 2015 at 5:55
  • The header provides declarations. It does not provide the implementations, usually. You need to link with the library, which you need to compile and perhaps install (depending on whether it's shared or static). Doesn't the README for the library tell you about this? Commented Jun 25, 2015 at 5:57

3 Answers 3

1

When linking statically, gcc brings the symbols that are already encountered. So if you are passing -ljson before your source files, gcc will take the static library and then eventually does not really need anything out of it. So you should put the libraries to link against after your code.

Though you have not shared what your compilation command line say, I would recommend trying something like:

$ gcc -g -v -Wall -std=gnu99 -static -L/path/to/compiled/library parsejson.c -o parsejson -ljson
Sign up to request clarification or add additional context in comments.

6 Comments

You would not use -L with the entire path to parsejson.c; you might use the full path to parsejson.c, or you might use -L with a directory that contains the compiled json-c library. Or you missed a space between the metacharacter > and the name parsejson.c in your command line.
it's not working says bash: -L: No such file or directory
@Jonathan: Yes, I missed a space between > and parsejson.c. I will edit that now. Thanks.
@Sparsh: I hope you are not using < and >. (You are supposed to omit that out)
@WedaPashi yes i've omit < and > but still getting error
|
1

try to use this:

#include "../json-c/json.h"

because if you user the compiler will search the json.h in standard libraries.Obviously,it isn't in the standard library.if you use what I have told you ,the compiler will search the json.h in curent workspace.

Comments

0

Try using

gcc parsejson.c -o parsejson -ljson-c

to compile and use

#include "json-c/json.h"

to include the header

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.