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は、すでに検出したものに基づいて、必要なシンボルのみを取り込もうとします。あなたの場合、ソースファイルの前に渡すので、gccは静的ライブラリを取り込み、そこ-ljsonから何も必要とせず、コードをビルドしようとします。

コードの後に​​リンクするライブラリを配置します。

$ 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 に答える