মারাত্মক ত্রুটি: ভিজ্যুয়াল স্টুডিওতে "কোনও লক্ষ্য আর্কিটেকচার নেই"


100

যখন আমি উইন 32 বা এক্স 64 মোডে ভিজ্যুয়াল স্টুডিও 2010 ব্যবহার করে আমার সি ++ প্রকল্পটি সংকলনের চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): fatal error C1189: #error : "No Target Architecture"

আমার প্রিপ্রসেসর সংজ্ঞাগুলি WIN32; _DEBUG; _CONSOLE;% (প্রিপ্রসেসর ডেফিনিশনস) বলে

কী কারণে এই ত্রুটি ঘটছে এবং আমি কীভাবে এটি ঠিক করব?

// winnt.h: lines 127-136, MSVS says this is an inactive preprocessor block
#if defined(_WIN64)

#if defined(_AMD64_)
#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif defined(_IA64_)
#define PROBE_ALIGNMENT( _s ) (TYPE_ALIGNMENT( _s ) > TYPE_ALIGNMENT( DWORD ) ? \
                              TYPE_ALIGNMENT( _s ) : TYPE_ALIGNMENT( DWORD ))
#else
#error "No Target Architecture"
#endif

আপডেট: আমি একটি নতুন এমএসভিএস প্রকল্প তৈরি করেছি এবং এতে আমার কোডটি অনুলিপি করেছি। আমার আর নেই error : "No Target Architecture", তবে এখন আমার কাছে winnt.h এবং winbase.h জড়িত সংকলন ত্রুটি রয়েছে এবং আমার কোনও ফাইল জড়িত কোনও সংকলন ত্রুটি নেই। এই ফাইলগুলি কি দূষিত হতে পারে? আমার কি এমএসভিএস ২০১০ পুনরায় ইনস্টল করা দরকার?

আপডেট 2: সুতরাং আমি আমার সমস্যাটি সঙ্কুচিত করে দেখলাম যে এটিই #include <WinDef.h>আমার উইন্ডেন্টের সাথে আমার সমস্ত সংকলন ত্রুটি ঘটায় তবে আমি কীভাবে এটি ঠিক করতে পারি তা এখনও জানি না।


আমি কীভাবে আমার প্রকল্পের জন্য লক্ষ্য স্থাপত্য স্থির করব?
ফিলিপভিআর

একটি ভ্যানিলা প্রকল্প এভাবে ব্যর্থ হয় না। আপনি একটি ভ্যানিলা প্রকল্প থেকে কী পরিবর্তন করেছেন? Winnt.h এর 135 লাইনে কী আছে? আপনি কি হেডার ফাইলটির সেই লাইনটি দেখেছেন? ত্রুটি বার্তা আপনাকে কিছু সহায়তা দিচ্ছে।
ডেভিড হেফারনান

আপনার এটিকে এখান থেকে কার্যকর করা উচিত; পুরো ছবিটি পেতে সম্ভবত 127 লাইনের আগে ফিরে যেতে হবে। এটি এডউইনকে সঠিক বলে মনে হয়েছিল।
ডেভিড হেফারনান

একটি নতুন এমএসভিএস প্রকল্প (ডামি) চেষ্টা করুন এবং এতে আপনার উত্সগুলিকে অনুলিপি করুন। এটি সংকলন করার চেষ্টা করুন এবং যদি এটি হয় তবে এটি আপনার মূল প্রকল্পের সাথে তুলনা করুন। বিটিডাব্লু স্টাডিএফএক্স অনুলিপি করবেন না। *
engf-010

খারাপ শোনাচ্ছে। তবে আপনি পুনরায় ইনস্টল করার আগে আপনি প্রথমে এটি একটি নতুন সমাধান দিয়ে চেষ্টা করতে পারেন এবং যদি এটি কাজ না করে তবে আপনি ম্যানুয়ালিটি প্রজেক্ট = টেমপ্লেটগুলি (গুগল) পুনরায় ইনস্টল করতে পারেন।
engf-010

উত্তর:


154

#include <windows.h>পরিবর্তে ব্যবহার করুন #include <windef.h>

থেকে windows.hউইকিপিডিয়া পৃষ্ঠা:

এখানে অনেকগুলি শিরোনাম ফাইল রয়েছে যা স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত windows.h। নির্ভরতার কারণে এই ফাইলগুলির মধ্যে অনেকগুলি কেবল নিজের দ্বারা অন্তর্ভুক্ত করা যায় না (এগুলি স্বনির্ভর নয় )

windef.hস্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত ফাইলগুলির মধ্যে একটি windows.h


আমি এটি ভেবেছিলাম, তবে আমি ইমেজিং করতে পারিনি যে আপনি উইন্ডোজ এইচ।
engf-010

4
উইন্ডোজ এইচ অন্যান্য সংজ্ঞা সংকলক-সুইচগুলির উপর ভিত্তি করে সংজ্ঞায়িত করে এবং অনেক উইনাপি-শিরোনামকে অন্তর্ভুক্ত করে, যার কয়েকটি উইন্ডোজ।
engf-010

অভিনন্দন, আপনি আপনার সমস্যা সমাধান করেছেন এবং আপনার কাছে ভোট দেওয়ার মতো যথেষ্ট পরিমাণে প্রতিনিধি রয়েছে!
ডেভিড হেফারনান

4
উইন্ডোজ। না উইন্ডোজএক্স। না (আমি তাদেরকে একই জিনিস হিসাবে ধরে নিচ্ছি তবে যাইহোক উভয়ই চেষ্টা করে দেখেছি) তাতে সহায়তা করুন #error Hey man you gotta choose a target.। আর কী তা ঠিক করতে পারত?
rsethc

শিরোনাম: উইন্ডোজ। এইগুলির কারণ হওয়ার আগে জিনপুট। সহ অন্তর্ভুক্ত বলে মনে হচ্ছে।
জেনস bkerblom

26

এর অন্য কারণ হ'ল শিরোনামের windows.hআগে নির্ভর করে এমন একটি শিরোলেখ অন্তর্ভুক্ত থাকতে পারে windows.h

আমার ক্ষেত্রে আমি xinput.hআগে অন্তর্ভুক্ত করেছি windows.hএবং এই ত্রুটি পেয়েছি। অর্ডার অদলবদল করে সমস্যার সমাধান।


5
ঠিক আমার সমাধান! আমাকে হতাশার কয়েক ঘন্টা বাঁচানোর জন্য ধন্যবাদ।
এসিডিক 9

5

_WIN32 সনাক্তকারী সংজ্ঞায়িত করা হয় না।

ব্যবহার #include <SDKDDKVer.h>

এমএসভিএস উত্পাদিত প্রকল্পগুলির মধ্যে এটি অন্তর্ভুক্ত একটি স্থানীয় উত্পাদন করে "targetver.h"যা এতে অন্তর্ভুক্ত থাকে যা "stdafx.h"একটি প্রাক-কম্পাইল-শিরোলেখের মাধ্যমে কমে যায় "stdafx.cpp"

সম্পাদনা: আপনার কমান্ডলাইনে একটি / ডি "WIN32" আছে?


এর _WIN32চেয়ে WIN32কি হওয়া উচিত ? এটি আমার দক্ষতার ক্ষেত্র নয়, তবে _WIN64শিরোনামটি '_AMD64_` ইত্যাদির সন্ধান করছে it এটিকে প্রশংসনীয় বলে মনে হবে।
ডেভিড হেফারনান

@ ডেভিড হেফারনান: কমান্ডলাইনে এটি এক্স 84 এর জন্য ডাব্লুআইএন 32 (না _) বলেছে। এর যুক্তিটি জানেন না (তবে কে এমএস বোঝে)
engf-010

4
@ এডউইন x84? এটা কি জর্জ অরওয়েলের কম্পিউটার?
ডেভিড হেফারনান

@ ডেভিড হেফারনান: হ্যাঁ, বড় ভাই আমাকে দেখছেন! (স্পষ্টত x64 আমি বোঝাতে চেয়েছি)
engf-010

আমার ক্ষেত্রে _WIN32 সংজ্ঞায়িত হয়েছিল এবং অপরাধী ছিল। আমি এক্স 64 এর জন্য নির্মাণ করছিলাম। তোমার উত্তর আমাকে ট্র্যাক এনেছে। সাবাশ!
হার্ভ মুটোম্বো

4

মনে _AMD64_হয় এটি সংজ্ঞায়িত নয়, যেহেতু আপনি ইটানিয়াম ( _IA64_) এর জন্য সংকলন করছেন তা আমি ভাবতে পারি না ।


যে AMD64 কিছু অবস্থার অধীনে সংজ্ঞায়িত করা হবে: #if সংজ্ঞায়িত ( 68K !) && সংজ্ঞায়িত ( MPPC !) && সংজ্ঞায়িত ( X86 !) && সংজ্ঞায়িত ( ia64 !) && সংজ্ঞায়িত ( যে AMD64 ) && সংজ্ঞায়িত (_M_AMD64)
engf-010

@ এডউইন যদি _AMD64_বা _IA64_সংজ্ঞায়িত হয় তবে তিনি ত্রুটিটি পাচ্ছেন না। হেডার ফাইলটি এটাই বলে।
ডেভিড হেফারনান

ফিলিপভিআর তার পোস্ট আপডেট করেছে। তার অন্যান্য (আরও) সমস্যা রয়েছে। তিনি আবার এমএসভিএস ইনস্টল করার কথা ভাবছেন।
engf-010

4

আপনি যদি রিশার্পার ব্যবহার করছেন তবে নিশ্চিত হয়ে নিন যে এটি আপনার জন্য ভুল শিরোনাম যোগ করে না, রিসার্পারের ক্ষেত্রে খুব সাধারণ ক্ষেত্রে হ'ল:

  • #include <consoleapi2.h
  • #include <apiquery2.h>
  • #include <fileapi.h>

আপডেট :
আরেকটি পরামর্শ হ'ল আপনি "আংশিক উইন্ডোজ এইচ" অন্তর্ভুক্ত করছেন কিনা তা যাচাই করা, আমার অর্থ হ'ল আপনি যদি উদাহরণস্বরূপ winbase.h বা minwindef.h অন্তর্ভুক্ত করেন তবে আপনি সেই ত্রুটিটি শেষ করতে পারেন, "বড়" উইন্ডোজ যুক্ত করুন .হ পরিবর্তে। কিছু কম সুস্পষ্ট কেসও রয়েছে যা আমি পেরেছি, সবচেয়ে উল্লেখযোগ্য ছিল যখন আমি কেবল সিনচাপি এইচ অন্তর্ভুক্ত করেছি, ডক্সে স্পষ্টভাবে উল্লেখ করা হয়েছে যে AcquireSRWLockShared এর মতো কিছু ফাংশনগুলির জন্য শিরোনাম অন্তর্ভুক্ত করা হয়েছিল তবে এটি কোনও লক্ষ্য আর্কিটেকচার, ফিক্সটি ট্রিগার করেছিল that synchapi.h অপসারণ এবং "বড়" উইন্ডোজ। এইচ অন্তর্ভুক্ত ছিল।

উইন্ডোজ এইচটি বিশাল it সংক্ষেপে , সর্বদা পরীক্ষা করুন যে আপনি উইন্ডোজ এইচ দ্বারা প্রতিস্থাপিত হতে পারে এমন কিছু শিরোলেখ অন্তর্ভুক্ত করছেন কিনা কারণ উইন্ডোজ এইচ দ্বারা সংজ্ঞায়িত কিছু স্থির উপর নির্ভর করে এমন একটি শিরোলেখ অন্তর্ভুক্ত করা অস্বাভাবিক কিছু নয়, তাই আপনি যদি এই শিরোনামটি অন্তর্ভুক্ত করতে ব্যর্থ হন তবে আপনার সংকলন ব্যর্থ হতে পারে।


3

নীচে ফাইল এবং সংজ্ঞা অন্তর্ভুক্ত রেখে এটি সমাধান করুন:

#define WIN32_LEAN_AND_MEAN      // Exclude rarely-used stuff from Windows headers

#include <windows.h>

এটি আমার x86 এবং x64 উভয়ই স্থির করে। আমার আগে এই লাইনগুলি যুক্ত করার দরকার ছিল #include <WinUser.h>
জোনাথন লিডবেক

2

আমারও একই সমস্যা ছিল। আমার ক্ষেত্রে, আমি ঘটনাক্রমে অন্তর্ভুক্ত ছিল winuser.hআগে windows.h(আসলে, একটি বগী আইডিই এক্সটেনশন এটি যোগ করেছে)। winuser.hসমস্যার সমাধান করা সরানো ।


4
আমার জন্য রিসার্পার যুক্ত হয়েছেconsoleapi2.h
এসডাব্লুডিভি

2

ইতিমধ্যে বর্ণিত কারণগুলি ছাড়াও, আমি এই ত্রুটিটি পেয়েছি কারণ আমি অন্তর্ভুক্ত করব:

#include <fileapi.h>

স্পষ্টতই এটির প্রয়োজন হয়নি (ক্রিয়েটডাইর্টরি ডাবল কল থাকা সত্ত্বেও)। মন্তব্য করার পরে, সংকলক খুশি হয়েছিল। খুব অদ্ভুত.


আমারও ঠিক একই অবস্থা।
JOE

2

ফাইলের শুরুতে আপনি সংকলন করছেন, যে কোনওটির আগে includeএই লাইনের একটি রাখার চেষ্টা করুন

#define _X86_
#define _AMD64_
#define _ARM_

আপনার আর্কিটেকচারের উপর নির্ভর করে উপযুক্ত, শুধুমাত্র একটি চয়ন করুন।


1

ত্রুটির আরেকটি কারণ (উইন 32 প্রকল্পের টার্গেট বিল্ডটি এক্স 64 এ পরিবর্তন করার সময় ক্রপ হওয়া অনেকের মধ্যেই) এই পৃষ্ঠার শীর্ষে বর্ণিত সি ++ 64 বিট সংকলক ইনস্টল করা হয়নি ।
চাইল্ড শিরোনাম সম্পর্কে ফিলিপভি’র মন্তব্যে আরও বলা হয়েছে, ( উইন্ডোজ এইচ যখন ব্যবহার করা হচ্ছে তখন অপ্রয়োজনীয় হওয়া ) উইন্ট হকের একটি স্পষ্টতই অন্তর্ভুক্ত রয়েছে ।


একটি পুরাতন প্রকল্পের সমালোচনামূলক বিভাগ শিরোনামে `# অন্তর্ভুক্ত <সিনচাপি।
লরি স্টারন

0

যদি আপনি 32 বিট তৈরি করছেন তবে নিশ্চিত হয়ে নিন যে আপনার প্রকল্পের জন্য _WIN64 সংজ্ঞায়িত করা নেই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.