ত্রুটি LNK2019: অমীমাংসিত বাহ্যিক প্রতীক _ ফাংশনে রেফারেন্স _WINMain @ 16 ___টায়মেনসিআরটিএস স্টার্টআপ


143

আমি নীচের মত সরল কোডটি চালানোর সময় আমার নিম্নরূপে দুটি ত্রুটি রয়েছে:

#include <iostream>
#include <string>
using namespace::std;

template <class Type>
class Stack
{
public:
    Stack (int max):stack(new Type[max]), top(-1), maxsize(max){}
    ~Stack (void) {delete []stack;}
    void Push (Type &val);
    void Pop (void) {if (top>=0) --top;}
    Type& Top (void) {return stack[top];}
    //friend ostream& operator<< (ostream&, Stack&);
private:
    Type *stack;
    int top;
    const int maxSize;
};

template <class Type>
void Stack <Type>:: Push (Type &val)
{
    if (top+1<maxsize)
        stack [++top]=val;
}

ত্রুটি:

MSVCRTD.lib (crtexew.obj): ত্রুটি LNK2019: অমীমাংসিত বাহ্যিক প্রতীক _WinMain@16ফাংশনে রেফারেন্স___tmainCRTStartup

আমার কি করা উচিৎ?


1
এটি কি সব কোড? আপনার মূল কাজটি কোথায়?
কনমান্যান

2
এছাড়াও দেখে মনে হচ্ছে প্রকল্পের ধরণটি ভুল সেট করা আছে। উইনমেইন সম্পর্কিত লিঙ্কারের ত্রুটিটি বোঝায় যে আপনি একটি উইন 32 প্রকল্প তৈরি করার চেষ্টা করেছিলেন। যদি আপনি কেবল কমান্ড প্রম্পটে আউটপুট পাঠ্যের জন্য কিছু চান, তবে প্রকল্পের ধরণটি কনসোলে পরিবর্তন করার চেষ্টা করুন।
কিলানাশ

4
যাইহোক, আপনি যদি সংকলক / লিঙ্কার ত্রুটি পেয়ে থাকেন তবে আপনি কোডটি "চালনা" করছেন না।
আন্দ্রে কারন

1
আমি প্রকল্পের ধরণের পরিবর্তন করার চেষ্টা করেছি, তবে কনজোলের পরিবর্তে প্রকল্প = উদাহরণ কাজ করেছে।
ডোম

উত্তর:


352

একটি লিঙ্কার সমস্যা।

বৈশিষ্ট্যগুলি -> লিংকার -> সিস্টেম -> সাবসিস্টেম (ভিজ্যুয়াল স্টুডিওতে) পরিবর্তন করার চেষ্টা করুন।

থেকে উইন্ডোজ (/ সাব-সিস্টেম: উইন্ডোজ) থেকে কনসোল (/ সাব-সিস্টেম: কনসোল)

এই আমাকে সাহায্য করেছে


3
আমি একই সমস্যা পেয়েছি। আপনার উত্তর সাহায্য করছে না। অন্য কোন পরামর্শ?
পার্থ সানে

1
এমএস ভিজ্যুয়াল স্টুডিও ব্যবহার করার সময় আমার এই সমস্যা হয়েছিল। যদি আপনার পরিবেশটি আলাদা হয় তবে আপনাকে এটি অন্যরকমভাবে ঠিক করতে হতে পারে। তবে এটি এখনও একটি লিঙ্কার সমস্যা হওয়া উচিত।
বোহদান 22

2
আপনি ব্যবহার করে থাকেন tWinMainআপনার প্রধান ফাংশন হিসাবে, আপনি tchar.h অন্তর্ভুক্ত করা আবশ্যক বা পারেন পরিবর্তন WinMainবা wWinMainথাকুক বা না থাকুক আপনার অ্যাপ্লিকেশন ইউনিকোড হয় উপর নির্ভর করে। এটি করতে ব্যর্থতা সঠিক সাবসিস্টেম সহ এমনকি এই লিঙ্কারের ত্রুটিও দেয়। (/ সাবস্কিস্টেম: উইন্ডোজ)
লিসা

এটি আমাকে সহায়তা করেছিল, তা ছাড়াও আমাকে অ্যাভাস্ট অ্যান্টি-ভাইরাস অক্ষম করতে হয়েছিল ।
এক্সসিএস 20

1
আমি প্ল্যাটফর্ম এবং টাইপ উভয়ের জন্য "সমস্ত কনফিগারেশন" নির্বাচন করার পরে এটি কাজ করেছিল। "সলিউশন" তে "বিল্ড" নির্বাচন করা সমস্ত তৈরির চেষ্টা করেছিল এবং প্রথমটি চেষ্টা করা হয়নি যা কনসোল সাবসিস্টেমের জন্য নির্দিষ্ট করা হয়নি।
জোসেফ স্টেটসন

83

অন্যরা যেমন উল্লেখ করেছে আপনি সাবসিস্টেমটি কনসোলে পরিবর্তন করতে পারবেন এবং ত্রুটিটি চলে যাবে।

অথবা আপনি যদি উইন্ডোজ সাবসিস্টেমটি রাখতে চান তবে আপনার প্রবেশের বিন্দুটি কী তা কেবল ইঙ্গিত করতে পারেন, কারণ আপনি সংজ্ঞাটি দেননি ___tmainCRTStartup। আপনি নিম্নলিখিত বৈশিষ্ট্যগুলিতে -> লিঙ্কার -> কমান্ড লাইনে যুক্ত করে এটি করতে পারেন :

/ এন্ট্রি: "mainCRTStartup"

এইভাবে আপনি কনসোল উইন্ডো থেকে মুক্তি পাবেন।


3
+1: "এভাবে আপনি কনসোল উইন্ডো থেকে মুক্তি পাবেন" " - কুল! শিখেছি sth। আজ নতুন!
ভ্যালেন্টিন হেইনিটজ

1
পরামর্শের জন্য +1, আমি 20 মিনিটের মতো এটি বের করার চেষ্টা করছিলাম, যেহেতু এসএফএমএল দিয়ে আমি কেবলমাত্র সাব সিস্টেম উইন্ডোজ নির্দিষ্ট করতে পারি, জিএলএফডাব্লু দিয়ে যে স্পষ্টতই আলাদা হয় না ধন্যবাদ (=
ড্যানিয়েল

14

যদি আপনার সমস্যা হয় এবং আপনি কিউটি ব্যবহার করেন - আপনাকে qtmain.lib বা qtmaind.lib লিঙ্ক করতে হবে


এটি প্রকল্প -> সম্পত্তি -> লিঙ্কার -> ইনপুটটিতে রয়েছে। যোগ $(QTDIR)\lib\qtmaind.libঅতিরিক্ত নির্ভরতা পূর্ণ করার উদ্দেশ্যে।
mathiasfk

1
ফাইলটি যুক্ত CONFIG += consoleকরা .proআমার কিউটি প্রকল্পের জন্য সমস্যাটি স্থির করেছে
সিনেক

12

এটি Console (/SUBSYSTEM:CONSOLE)অন্যরা যেমন বলেছেন তেমন পরিবর্তন করার পাশাপাশি আপনাকে সম্পত্তি -> লিংকার -> উন্নত -> এন্ট্রি পয়েন্টে প্রবেশের স্থানটি পরিবর্তন করতে হতে পারে । এটি মেইনসিআরটিএসটিআর্টআপে সেট করুন ।

দেখে মনে হচ্ছে ভিজ্যুয়াল স্টুডিও উইন্ডমেন ফাংশনটি মূলের পরিবর্তে অনুসন্ধান করছে, যদি আপনি অন্যথায় নির্দিষ্ট না করেন।



7

আপনি যদি ইউনিকোড ক্যারেক্টার সেট ব্যবহার করেন তবে প্রবেশটি সেট করা হয়নি, আপনি / ENTRY নির্দিষ্ট করতে পারেন: "wWinMainCRTStartup"


আমার জন্য জীবন রক্ষাকারী! আমি সিএমকে + এমএফসি (ইউনিকোড)
মালাত

4

আমি মূল কাজটি দেখতে পাচ্ছি না।

এটির প্রধান কার্যকারিতা রয়েছে তা নিশ্চিত করুন।

উদাহরণ:

int main(int argc, TCHAR *argv[]){

}

আশা করি এটি ভালভাবে কাজ করে। :)


এই সাহায্য করে না। লিঙ্কার একটি অনির্ধারিত উইনমেইন এন্ট্রি পয়েন্ট সম্পর্কে অভিযোগ করছে । নামক একটি এন্ট্রি পয়েন্ট সংজ্ঞা mainদেওয়া এর সমাধান করার জন্য কিছুই করে না।
দ্বৈতস্পর্শী

লিঙ্কারটি বিভিন্ন main/ WinMainসংস্করণগুলি সমাধান করার চেষ্টা করে এবং এর মধ্যে যদি কোনওটি না পাওয়া যায় তবে এটি WinMain @ 16 খুঁজে পাওয়া যায়নি , তবে এই বার্তাটি ঠিক সঠিক নয়।
লরিঞ্জি জিসিগমন্ড

3

যদি আপনার প্রকল্পটি ডেল হয়, তবে লিঙ্কার কোনও কনসোল প্রোগ্রাম তৈরি করতে চায় case প্রকল্পের বৈশিষ্ট্যগুলি খুলুন। সাধারণ সেটিংস নির্বাচন করুন। কনফিগারেশন টাইপ ডায়নামিক লাইব্রেরি নির্বাচন করুন (.dll)।


আমার ঠিক সেই সমস্যাটি রয়েছে তবে .dllসেট সংকলকটি এখনও উইন্ডোজ অ্যাপ তৈরির চেষ্টা করছে।
টোমা জাটো -

3

আমার এই উত্তরটি কোথায় পোস্ট করবেন তা আমি নিশ্চিত নই তবে আমি মনে করি এটি সঠিক জায়গা। আমি আজ এই ত্রুটিটি পেরিয়ে এসেছি এবং সাবসিস্টেমগুলি স্যুইচ করার ফলে কোনও জিনিসই বদলায়নি।

Bit৪ বিট লাইব ফাইলগুলি 32 বিট (x86) এ পরিবর্তন করা আমার জন্য কৌশলটি করেছে, আমি আশা করি এটি কারও পক্ষে সহায়তা করবে!


আমি এটি চেষ্টা করেছি এবং কাজ করেছি, যদিও একই লক্ষ্যগুলির উপর নির্ভরতার একটি পুনরায় গঠন কাজ করে।
জেমি নিকোল-শেলি

আমার জন্যও কাজ করেছিল ... ইউনিট পরীক্ষার উইজার্ড 32 বিট এন্ট্রি পয়েন্ট ব্যবহার করে বলে মনে হচ্ছে
এরিক অ্যারোনস্টি

3

যদি আপনি প্রকৃতপক্ষে প্রধান () এর পরিবর্তে _tWinMain () ব্যবহার করতে চান তবে নিশ্চিত করুন যে আপনার প্রকল্পের প্রাসঙ্গিক কনফিগারেশন রয়েছে

  1. লিংকার-> সিস্টেম -> সাবসিস্টেম => উইন্ডোজ (/ সাবস্কিস্টেম: উইন্ডোজ)
  2. সি / সি ++ -> প্রাকপ্রসেসর -> প্রিপ্রসেসর সংজ্ঞা => _ উইন্ডো দিয়ে _ কনসোলকে প্রতিস্থাপন করুন
  3. সি / সিপিপি ফাইল যেখানে _tWinMain () সংজ্ঞায়িত হয়েছে সেখানে যুক্ত করুন:

    #include <Windows.h> #include <tchar.h>


2

আপনার উত্স ফাইলটি একটি নির্বাহযোগ্য হিসাবে পরিণত করার চেষ্টা করা হয়েছে, যা সম্ভবত সম্ভব নয়, কারণ বাধ্যতামূলক প্রবেশের বিন্দু, mainকার্যটি সংজ্ঞায়িত হয়নি। একটি ফাইল main.cpp যুক্ত করুন এবং একটি প্রধান ফাংশন সংজ্ঞায়িত করুন। আপনি যদি কমান্ডলাইনে কাজ করছেন (যা আমি সন্দেহ করি) তবে /cআপনি কেবল সংকলন যোগ করতে পারেন এবং লিঙ্কটি যোগ করতে পারেন না। এটি কেবলমাত্র একটি অবজেক্ট ফাইল তৈরি করবে, যা স্ট্যাটিক বা শেয়ারড লিব বা অ্যাপ্লিকেশনের সাথে লিঙ্ক করা দরকার (এক্ষেত্রে আপনার মুখ্য সংজ্ঞায়িত একটি ওজেক্ট ফাইলের প্রয়োজন হবে)।

_WinMainmainলিঙ্ক করার সময় মাইক্রোসফ্টের নাম ।

এছাড়াও: আপনি কোডটি এখনও চালাচ্ছেন না, আপনি এটি সংকলন করছেন (এবং সংযুক্ত করছেন)। সি ++ কোনও ব্যাখ্যািত ভাষা নয়।


5
আসলে, তার একটি WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)এন্ট্রি পয়েন্ট দরকার। এই লিঙ্কারের ত্রুটিটি নির্দেশ করে যে প্রকল্পটি উইন্ডোজ সাবসিস্টেমের জন্য নির্মিত হচ্ছে, কনসোল সাবসিস্টেমের জন্য নয়।
আদম মারাস

@ অ্যাডাম: আহা হ্যাঁ, আমি কিউটি দ্বারা নষ্ট হয়েছি :) (যা কার্যকরভাবে উইনমাইনকে আপনার কাছ থেকে আড়াল করে)।
রুবেনভিবি

উইনমেইন শুধুমাত্র উইন্ডোজ অ্যাপ্লিকেশনগুলির জন্য। কনসোল অ্যাপ্লিকেশনগুলি পৃথক নাম _tmain ব্যবহার করে, যা ইউনিকোড / এমবিসিএস সেটিংয়ের উপর নির্ভর করে প্রধান বা ওয়ামেনে সমাধান হয়।
স্টিভ টাউনসেন্ড

@ অ্যাডামারস, নিখুঁত আমি প্রয়োজনীয় মূলধন এবং প্রোটোটাইপ খুঁজছিলাম। এটি এখন পুরোপুরি কাজ করে works ধন্যবাদ!
সিনিটেক

_WinMain@16উইন্ডোজ সাবসিস্টেমটিকে টার্গেট করার সময় সিআরটি-তে স্টার্টআপ কোড দ্বারা ডাকা ব্যবহারকারী-সরবরাহ করা এন্ট্রি পয়েন্টের সজ্জিত প্রতীক। এটি " mainলিঙ্ক করার সময় মাইক্রোসফ্টের নাম নয় " । আপনি যদি কনসোল সাবসিস্টেমটিকে লক্ষ্যবস্তু করেন তবে সিআরটি যে ভিজ্যুয়াল স্টুডিও সহ জাহাজগুলি নাম্বার দিয়ে একটি এন্ট্রি পয়েন্ট কল করবে main। অপরিবর্তিত থাকলে, লিঙ্কারটি একটি নিখোঁজ প্রতীক হিসাবে অভিযোগ করবে _main
IInspectable

1

আপনি যদি সিএমকে ব্যবহার করছেন, আপনি যখন SET(GUI_TYPE WIN32)কনসোল অ্যাপ্লিকেশনটি সেট করবেন তখন আপনি এই ত্রুটিটি পেতেও পারেন ।


1

উপরে উল্লিখিত অদ্ভুত পরামর্শগুলি 99.99% ক্ষেত্রে সমস্যার সমাধান করবে। এটা আমার ভাগ্য যে তারা না। আমার ক্ষেত্রে এটি প্রমাণিত হয়েছে যে আমি একটি ভিন্ন উইন্ডোজ প্রকল্পের একটি শিরোনাম ফাইল অন্তর্ভুক্ত করছি। নিশ্চিতভাবেই, ফাইলটির একেবারে নীচে আমি নির্দেশটি পেয়েছি:

#pragma comment(linker, "/subsystem:Windows")

বলা বাহুল্য, এই লাইনটি সরিয়ে দেওয়া আমার সমস্যার সমাধান করেছে।

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