Hi I am try create static library from yaml-cpp.
Windows x64 to use in my own project
I did next steps:
Clone repo prepare build dir and move to it
mkdir build
cd build
Configure Cmake in different variants:
1)
cmake -G "MinGW Makefiles" -DYAML_BUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=../for_D7 ..
cmake -G "MinGW Makefiles" -DYAML_BUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=../for_D7 -DYAML_CPP_BUILD_CONTRIB=ON -DYAML_CPP_BUILD_TOOLS=ON -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_FLAGS="-std=c++17" ..
Execute building
cmake --build . --config Release --target install
And and try same shit for using MSVC.
I`v got for one case yaml-cpp.lib (when i try ti get it with MSVC) andd libyaml-cpp.a (for MinGW)
I try to use both of them in my app.
This is how in my main.cpp:
if (argc == 2 && (strstr(argv[1], ".yaml") != NULL)) {
char* file_folder;
char* file_name;
char* mode;
char* dll_folder;
char* dll_name;
int chunk_len;
int port;
try {
YAML::Node config = YAML::LoadFile(argv[1]);
if (config["sample_source"]) {
YAML::Node sample_source = config["sample_source"];
if (sample_source["file_folder_env_var"]) {
const char* ts = sample_source["file_folder_env_var"].as<std::string>().c_str();
file_folder = get_env_variable(ts);
if (file_folder == NULL) {
file_folder = (char*)DEFAULT_SIGNAL_DATA_PATH;
}
} else {
file_folder = (char*)"NOT SET";
}
if (sample_source["file_name"]) {
file_name = (char*)sample_source["file_name"].as<std::string>().c_str();
} else {
file_name = (char*)"NOT SET";
}
if (sample_source["mode"]) {
mode = (char*)sample_source["mode"].as<std::string>().c_str();
} else {
mode = (char*)"NOT SET";
}
if (sample_source["rtlsdr_dll"]["path"]) {
dll_folder = (char*)sample_source["rtlsdr_dll"]["path"].as<std::string>().c_str();
} else {
dll_folder = (char*)"NOT SET";
}
if (sample_source["rtlsdr_dll"]["file"]) {
dll_name = (char*)sample_source["rtlsdr_dll"]["file"].as<std::string>().c_str();
} else {
dll_name = (char*)"NOT SET";
}
if (sample_source["port"]) {
port = sample_source["port"].as<int>();
} else {
port = -1;
}
if (sample_source["chunk_len"]) {
chunk_len = sample_source["chunk_len"].as<int>();
} else {
chunk_len = -1;
}
printf("Mode: %sn", mode);
printf("File path: %sn", file_folder);
printf("File name: %sn", file_name);
printf("DLL path: %sn", dll_folder);
printf("DLL name: %sn", dll_name);
printf("Port: %dn", port);
printf("Chunk len: %dn", chunk_len);
}
}
catch (const std::exception& ex) {
printf("Error: %sn", ex.what());
return -1;
}
return 0;
}
My app compiled – i get object files. Compile in that way:
gcc -c -g -D_DEBUG -D_D7 -std=c++17 -Iexternal_binariesyaml-cppinclude -Iexternal_binariesffftw3.3.5_x64 -Iinclude srcrtl-sdr-wrapperwrapper.cpp srcrtl-sdr-wrapperrcv_test.cpp srccommon.cpp srcmain.cpp
But linkage fails
g++ -o build/release/spectro_mk2.exe wrapper.o rcv_test.o common.o main.o -L"external_binariesyaml-cpplib" -L"external_binariesffftw3.3.5_x64" -lyaml -llibfftw3-3 -lws2_32
Output is too large but in breef It couldnt find some symbols. I make check like this:
nm libyaml-cpp.a > symbols.txt
findstr "__imp__ZN4YAML8LoadFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE" symbols.txt
findstr "__imp__ZTVN4YAML9ExceptionE" symbols.txt
findstr "__imp__ZN4YAML6detail6memory11create_nodeEv" symbols.txt
findstr "__imp__ZN4YAML11InvalidNodeD1Ev" symbols.txt
findstr "__imp__ZN4YAML23RepresentationExceptionE" symbols.txt
findstr "__imp__ZN4YAML13BadConversionE" symbols.txt
findstr "__imp__ZN4YAML6detail9node_data12empty_scalarB5cxx11Ev" symbols.txt
findstr "__imp__ZN4YAML12BadSubscriptE" symbols.txt
findstr "__imp__ZN4YAML6detail13memory_holder5mergeERS1_" symbols.txt
No such symbols
Same trouble when i try use static library made by MSVC – same linker errors
I`am very new to all that CMake stuff))
@JesseBeder
I wait for help with usage if that exact lib
And be grateful for explain how that CMake stuff work in coomon cocept
DimaSem is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.