我试图使用VSCode在Linux RT内交叉编译一个C代码和CMake。但是我遇到了一个错误,这是由于将(.so)文件与项目链接时出错。我尝试了许多解决方案,但未能运行该任务。我的代码如下所示:
` #include<stdio.h>
#include"/home/admin/helloworld/src/NIDAQmx.h"
TaskHandle taskHandle=0;
int ret=0;
void main()
{
printf("Hello world");
ret=DAQmxCreateTask("task",&taskHandle);
printf("Return for creating task is %d\n",ret);
DAQmxStopTask (taskHandle);
DAQmxClearTask(taskHandle);
printf("Task closed ");
} `
运行任务时出错
`[ 50%] Linking C executable bin/helloWorld
CMakeFiles/helloWorld.dir/home/admin/helloworld/src/helloWorld.c.o: In function `main':
/home/admin/helloworld/src/helloWorld.c:11: undefined reference to `DAQmxCreateTask'
/home/admin/helloworld/src/helloWorld.c:13: undefined reference to `DAQmxStopTask'
/home/admin/helloworld/src/helloWorld.c:14: undefined reference to `DAQmxClearTask'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/helloWorld.dir/build.make:95: bin/helloWorld] Error 1
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/helloWorld.dir/all] Error 2
* The terminal process "/bin/bash '-c', 'make'" failed to launch (exit code: 2).
* Terminal will be reused by tasks, press any key to close it. `
我修改了我的CMakeLists.txt如下:
` cmake_minimum_required(VERSION 3.7.2)
# project settings
project(helloWorld VERSION 0.1.0)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin)
set(CMAKE_GENERATOR "Unix Makefiles")
# executable settings
add_executable(helloWorld ../src/helloWorld.c)
set(CMAKE_BUILD_TYPE Debug)
LINK_LIBRARIES(NIDAQmx ../src/libnidaqmx.so)
`
如果我删除了与NIDAQmx代码正常工作相关的元素。
1条答案
按热度按时间nsc4cvqm1#
命令
link_libraries
仅影响可执行文件和库,在之后添加了。从documentation:将库链接到以后添加的所有目标。
因此,您需要将可执行文件移动到该命令之后:
此外,最好避免使用
link_libraries
命令,而使用target_link_libraries
命令,在target_link_libraries
命令中,您可以显式指定要与给定库链接的目标: