当我的应用程序需要链接pthread库时,我在CmakeLists.txt中写了Parameters:
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2'
Resources:
Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref LatestAmiId
并起作用。但是,当我需要链接dl lib时,set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lpthread")
不起作用。如果我直接使用gcc, set ( CMAKE_C_FLAGS_C_FLAGS "${CMAKE_C_FLAGS} -ldl")
可以正常工作。在Google之后,我知道gcc sqlite3.c shell.c -lpthread -ldl
可以工作。我尝试过。我确实可以工作。我想知道为什么target_link_libraries(MY_TARGET LIB1 LIB2 ... LIBN ${CMAKE_DL_LIBS})
不起作用吗?
答案 0 :(得分:2)
似乎您正在尝试链接dl库。但是,CMAKE_C_FLAGS
仅影响编译,而不影响链接。也许您宁愿设置CMAKE_*_LINKER_FLAGS
(链接器标志分别用于EXE
,SHARED
和MODULE
)。
但是,如前所述, modern 声明已使用库的方法是target_link_libraries
命令。
此处是相应的文档链接。