使用 main 创建共享库以调用未定义的函数并在其他项目中提供函数体
create shared library with main to call undefined function and provide function body in other project
我需要使用 cmake 创建一个共享库,并且我必须在库函数中调用函数 run()
。但是使用这个库的项目应该提供这个函数的主体。
真实案例使用systemC强制库实现main函数。为了避免进一步的复杂性,我尝试像这样简化案例:
MyInterface.h
void run();
MyLibraryAction.cpp
#include "MyInterface.h"
int main(){
run();
}
cmake内容为:
add_library(mylib SHARED MyLibraryAction.cpp)
set_target_properties(mylib PROPERTIES PUBLIC_HEADER MyInterface.h)
configure_file(mylib.pc.in mylib.pc @ONLY)
install(
TARGETS mylib
DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES ${CMAKE_BINARY_DIR}/mylib.pc
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)
我想知道这是否可能。如果是这样,我这样做对吗?在这种情况下使用 extern
是否相关?
当我尝试构建和创建库时出现错误:
undefined reference to run()
如评论中所述,弱符号在这种情况下效果很好。
MyInterface.h
void run();
然后用弱符号实现 run
函数:
InterfaceWeakImplementation.h
void __attribute__((weak)) run(){
// pass
}
并在调用方项目中进行实际实现
InterfaceStrongImplementation.h
void run(){
// Some real work
}
我需要使用 cmake 创建一个共享库,并且我必须在库函数中调用函数 run()
。但是使用这个库的项目应该提供这个函数的主体。
真实案例使用systemC强制库实现main函数。为了避免进一步的复杂性,我尝试像这样简化案例:
MyInterface.h
void run();
MyLibraryAction.cpp
#include "MyInterface.h"
int main(){
run();
}
cmake内容为:
add_library(mylib SHARED MyLibraryAction.cpp)
set_target_properties(mylib PROPERTIES PUBLIC_HEADER MyInterface.h)
configure_file(mylib.pc.in mylib.pc @ONLY)
install(
TARGETS mylib
DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES ${CMAKE_BINARY_DIR}/mylib.pc
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)
我想知道这是否可能。如果是这样,我这样做对吗?在这种情况下使用 extern
是否相关?
当我尝试构建和创建库时出现错误:
undefined reference to
run()
如评论中所述,弱符号在这种情况下效果很好。
MyInterface.h
void run();
然后用弱符号实现 run
函数:
InterfaceWeakImplementation.h
void __attribute__((weak)) run(){
// pass
}
并在调用方项目中进行实际实现
InterfaceStrongImplementation.h
void run(){
// Some real work
}