Чего мне не хватает в параметрах компилятора для связи со статической библиотекой JSON-C? - PullRequest
6 голосов
/ 20 ноября 2010

Я пытаюсь скомпилировать тестовые двоичные файлы json-c-0.9, статически связываясь с libjson.a, который я построил и который находится в /path/to/json-c-0.9/lib:

$ gcc -g -v -Wall -std=gnu99 -static -L/path/to/json-c-0.9/lib -ljson test1.c -o test1                                                  

Я получаю многочисленные ошибки вида:

/path/to/json-c-0.9/test1.c:17: undefined reference to `json_object_new_string'                                                        
/path/to/json-c-0.9/test1.c:18: undefined reference to `json_object_get_string'                                                        
/path/to/json-c-0.9/test1.c:19: undefined reference to `json_object_to_json_string'                                                    
/path/to/json-c-0.9/test1.c:20: undefined reference to `json_object_put'                                                               
/path/to/json-c-0.9/test1.c:22: undefined reference to `json_object_new_string'
etc.

Чего мне не хватает при попытке скомпилировать тестовые файлы? Спасибо за ваш совет.

1 Ответ

9 голосов
/ 20 ноября 2010

При статическом связывании gcc пытается ввести только те символы, которые ему нужны, исходя из того, с чем он уже столкнулся. В вашем случае вы передаете -ljson перед исходными файлами, поэтому gcc вводит статическую библиотеку и ничего от нее не требует, , а затем пытается создать ваш код.

Поместите библиотеки для ссылки после вашего кода.

$ gcc -g -v -Wall -std=gnu99 -static -L/path/to/json-c-0.9/lib test1.c -o test1 -ljson
...