c++ -FPIC সংকলক বিকল্পটি যুক্ত করতে CMAKE এর মূ ?় উপায় কী?



(1)

আমি এটি করার জন্য কমপক্ষে 3 টি উপায় নিয়ে এসেছি এবং আমি ভাবছি যা হ'ল প্রতিমাটি। এটি কোনও স্ট্যাটিক লাইব্রেরিতে প্রায় সর্বজনীনভাবে করা দরকার। আমি আশ্চর্য হয়েছি যে সিএমকেমে মেকফাইল জেনারেটর স্বয়ংক্রিয়ভাবে এটি স্ট্যাটিক লাইব্রেরিতে যুক্ত করে না। (যদি না আমি কিছু মিস করছি?)

target_compile_options(myLib PRIVATE -fPIC)

add_compile_options(-fPIC)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")

আমি বিশ্বাস করি এর অন্যান্য বিভিন্নতাও থাকতে পারে। (আপনি যদি একটি প্রশ্ন পান তবে আমার প্রশ্নটি সম্পাদনা করুন)

আপনি যদি এই প্রশ্নের উত্তর জানতেই পারেন, আপনি কি এটাও জানেন যে কোনও তৃতীয় পক্ষের সিএমকে প্রকল্পের সিএমকেলিস্ট.টিএসটিএক্স ফাইলটি সংশোধন না করে এই পতাকাটি সংকলিত করার কোনও উপায় আছে কিনা? আমি সেই পতাকাটি অনুপস্থিত স্থির লাইব্রেরি জুড়ে চলেছি। স্থির গ্রন্থাগারকে গতিশীল লাইব্রেরিতে সংকলন করার সময় এটি সমস্যার সৃষ্টি করে।

তুমি পাও:

relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC

Answer #1

আপনি সমস্ত লক্ষ্যবস্তুতে অবস্থানের স্বাধীন কোড সম্পত্তি সেট করতে পারেন:

set(CMAKE_POSITION_INDEPENDENT_CODE ON)

বা একটি নির্দিষ্ট গ্রন্থাগারে:

add_library(lib1 SHARED lib1.cpp)
set_property(TARGET lib1 PROPERTY POSITION_INDEPENDENT_CODE ON)

তথ্যসূত্র: CMAKE_POSITION_INDEPENDENT_CODE cmake বিল্ড সিস্টেম





cmake