6

我正在尝试编译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.

我在尝试编译测试二进制文件时缺少什么?谢谢你的建议。

4

2 回答 2

10

使用静态链接,gcc 只尝试根据它已经遇到的内容引入它需要的符号。在您的情况下,您在源文件之前传递-ljson,因此 gcc 引入了静态库并且不需要其中的任何内容,然后尝试构建您的代码。

在您的代码之后放置要链接的库。

$ gcc -g -v -Wall -std=gnu99 -static -L/path/to/json-c-0.9/lib test1.c -o test1 -ljson
于 2010-11-19T23:02:46.520 回答
0

这是我的 Cmakelist.txt。untitled3,4 是文件夹名称。请记住将头文件放在同一文件夹中或正确指向它。

    cmake_minimum_required(VERSION 3.15)
project(untitled3 C )
#find_package( OpenCV REQUIRED )
ADD_LIBRARY(LibsModule
        main.c
        json.h
        libjson.c
        )

target_link_libraries(LibsModule -lpthread)
target_link_libraries(LibsModule libjson-c.a)
target_link_libraries(LibsModule libjson-c.4.dylib)

target_link_libraries(LibsModule -L/usr/local/Cellar/json-c/0.13.1/lib)

include_directories(/usr/local/lib/pkgconfig)
include_directories(untitled3)
set(CMAKE_C_STANDARD 99)
set(SOURCES  json.h main.c )

configure_file (
        "${PROJECT_SOURCE_DIR}/json.h"
        "${PROJECT_BINARY_DIR}/json.h"
)


add_executable( untitled4 ${SOURCES} )

target_link_libraries(untitled4 LibsModule)
于 2019-10-17T13:41:40.813 回答