问题一:CMake Error: cmake_symlink_library: System Error: Operation not supported
现象:
在make的过程中存在:
[ 14%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql-common/my_time.c.o
[ 14%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql-common/client_plugin.c.o
[ 14%] Building CXX object libmysql/CMakeFiles/clientlib.dir/__/sql-common/client_authentication.cc.o
[ 14%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql-common/get_password.c.o
[ 14%] Building CXX object libmysql/CMakeFiles/clientlib.dir/__/sql/net_serv.cc.o
[ 14%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql-common/pack.c.o
[ 14%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql/auth/password.c.o
[ 14%] Building CXX object libmysql/CMakeFiles/clientlib.dir/__/sql/auth/sha2_password_common.cc.o
[ 14%] Building C object libmysql/CMakeFiles/clientlib.dir/mysql_trace.c.o
[ 14%] Linking CXX static library ../archive_output_directory/libclientlib.a
[ 14%] Built target clientlib
Scanning dependencies of target libmysql
[ 14%] Building CXX object libmysql/CMakeFiles/libmysql.dir/libmysql_dummy.cc.o
[ 14%] Linking CXX shared library libmysqlclient.so
CMake Error: cmake_symlink_library: System Error: Operation not supported
CMake Error: cmake_symlink_library: System Error: Operation not supported
make[2]: *** [libmysql/libmysqlclient.so.20.3.14] Error 1
make[2]: *** Deleting file `libmysql/libmysqlclient.so.20.3.14'
make[1]: *** [libmysql/CMakeFiles/libmysql.dir/all] Error 2
make: *** [all] Error 2
原因分析:
使用vmware的共享文件夹,直接在windows和linux的共享文件夹下进行相应的编译了
将mysql的源代码复制到本地操作系统,再进行编译就可以了。
同时注意,如果有符号连接,则也可以出现这样的问题
使用交叉编译的时候,编译最好还是通过linux本地的系统来实现
而windows编码到linux的同步,可以使用svn或beyond compare对比,做代码合入。在这个过程中使用mysqld编译的话,是可以使用samba服务来实现的
问题2:lex_hash.h 和mysql_version.h
这个两个C语言的头文件,是在我们编译的过程中生成的。源代码目录中并不存在。
具体的原理需要进上步学习,现在先记录一下。
在linux源码编译的系统中,通过cmake和make之后,就会生成
mysql_version.h的生成目录:mysql5.7.27/include/mysql_version.h
lex_hash.h的生成目录:sql/lex_hash.h