【发布时间】:2017-06-23 13:30:54
【问题描述】:
这是我的 C++ 代码:
#include "stdlib.h"
#include "stdio.h"
#include <iostream>
int main(int argc, char *argv[] ) {
int width, height;
unsigned char *rgba;
FILE *fp = fopen("/home/pic.tif", "rb");
if(!fp)
std::cout<<"failed"<<std::endl;
rgba = floadtiff(fp, &width, &height);
fclose(fp);
if(rgba == 0)
printf("TIFF file unreadable\n");
}
我正在使用@MalcolmMcLean 的this 库,这就是我的loadtiff.c。我已经使用gcc 对其进行了编译,并且正在尝试链接该库。
这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.12.2)
project (test)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} cmake/)
add_executable(test tiffs.cpp)
target_link_libraries(test loadtiff)
这些是我在尝试制作程序时遇到的错误:
error: ‘floadtiff’ was not declared in this scope
为什么我无法访问这个在 loadtiff.c 中定义的函数?
【问题讨论】:
-
您确定包含正确的文件吗?
#include通常用于包含头文件,而不是源文件。 -
如果这是 C++,为什么还要包含 C 头文件(即 stdio.h)以及 C++ 头文件?
-
@ChrisTurner 我以为 stdio.h 是 C++ 头文件,我不知道!是的,我认为那是正确的文件,他说只需将其放入并编译?
-
在您的 tiffs.cpp 文件中,您需要包含
#include "loadtiff.h"而不是 loadtiff.c -
请将您的 loadtiff 库编译为静态库而不是共享对象。通过将
add_library(loadtiff STATIC loadtiff.c)添加到您的 CMakeLists.txt 中。然后在您的tiffs.cpp文件中添加extern "C" { #include "loadtiff.h" }行。
标签: c++ c cmake linker shared-libraries