我正在将一个make文件转换为cmake。
Make:
ORACLE = -L${ORACLE_HOME}/lib/ -lclntsh \
-I${ORACLE_HOME}/rdbms/public
CMAKE:
include_directories(${ORACLE_DIR}/include)
link_directories(${ORACLE_DIR}/lib)
project(DB_I)
add_executable(DB_I DB_I.c)
target_link_libraries(DB_I LINK_PUBLIC ${PROJECT_LINK_LIBS} -lclntsh)
install(TARGETS DB_I DESTINATION ${OPEN_FOX_BIN_DIR})
Error:
[ 53%] Linking C executable DB_I
/usr/bin/ld: cannot find -lclntsh
collect2: error: ld returned 1 exit status
我有ORACLE_HOME指向文件所在的目录。编译器正在找到它需要的OCI.H文件。
Directory structure...
ORACLE_HOME
include
oci.h
lib
libclntsh.so
我甚至尝试将库移动到与源相同的目录中。 我甚至将 clntsh 复制到/ usr / bin。
我错过了什么? 感谢
答案 0 :(得分:0)
您不需要target_link_libraries中的前导-l
target_link_libraries(DB_I LINK_PUBLIC ${PROJECT_LINK_LIBS} clntsh)
答案 1 :(得分:0)
对不起 我刚刚注意到库文件是一个链接。而且链接错了。 我修好了,一切都很好。 谢谢你的关注
答案 2 :(得分:0)
问题是ORACLE_HOME
是一个环境变量。
在Make中你获得${ORACLE_HOME}
的价值但在cmake中你必须写$ENV{ORACLE_HOME}
同时更改
link_directories(${ORACLE_DIR}/lib)
进入
link_directories($ENV{ORACLE_DIR}/lib)